Extraire des info par périodes

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Extraire des info par périodes

    Bonjour,
    Sur un de mes site, les visiteurs peuvent poster des publications.
    Dans une table je stocke le nombre de "vues" de ces publications, avec la date et l'heure de chaque "vues"
    Il y a bien entendu une quantité de "vues" variable chaque jour.

    J'ai besoin de comptabiliser toutes les "vues" d'une publication sur une période (7 jours par exemple), et en calculant la quantité de "vues" par jour.

    J'ai une requête qui extrait le nombre de "vues" total depuis la date de la publication.
    j'ai créé deux variables pour déterminer la période, une qui représente la date du jour et une autre qui représente la date du jour moins 7 jours.

    Dois-je créer autant de variables que de jours pour créer ma requête ?
    Ou existe-t'il une autre solution ?

    Voilà la requête qui récupère la totalité des "vues" (hits) dans la table.
    Code PHP:
    $db JFactory::getDbo();
        
    $query $db->getQuery(true);
        
    $query->select(array('hits, title, creator_uid, cluster_type, category_id, alias'))
            ->
    from($db->quoteName('#__social_clusters'))
            ->
    where($db->quoteName('id')." = ".$db->quote($idClusterFiltre));  
        
    $db->setQuery($query);
        
    $resultat $db->loadAssoc();    
        
    $TypeHits $resultat['hits'];
        
    $TypeTitle$resultat['title'];
        
    $Typealias $resultat['alias'];
        
    $Typecreator $resultat['creator_uid']; 
    Je vais déposer des conditions supplémentaires dans le "where" pour réduire les résultats à la période

    Cordialement.

    Eric

  • #2
    Bonjour,
    Une question : comment stockes-tu dans la base les vues par jour ? as tu une date stockée pour chaque hit ?

    Cordialement,
    Chabi01 - http://www.xlformation.com

    Commentaire


    • #3
      Bonjour chabi01,
      Oui j'ai un enregistrement par hit, avec la date.
      Bien cordialement.
      Eric

      Commentaire


      • #4
        Bonjour,
        Dans ce cas, tu dois pouvoir faire une requête en utilisant between (avec un date du jour et date du jour -7) : https://sql.sh/cours/where/between

        Cordialement,
        Chabi01 - http://www.xlformation.com

        Commentaire


        • #5
          Merci beaucoup, je vais regarder cela

          Commentaire


          • #6
            Bonjour,
            Between rempli bien la fonction que je cherche.
            J'essaie maintenant de regrouper les valeur par date,par exemple, je compte le nombre de hits entre le 1 et le 3 du mois.
            J'ai eu 5 hits le 1, 2 hits le 2, 7 hits le 3.

            J'ai pensé utiliser Count(Distinct colonne) sur la colonne date mais le souci est que la date dans la table est enregistrée avec l'heure, les minutes et les secondes, je ne vois pas comment le faire compter uniquement sur l'année, le mois et le jour.

            Cordialement.

            Eric

            Commentaire


            • #7
              Re bonjour,
              Avec ceci, tu peux raffiner : https://www.w3schools.com/sql/func_s...er_dateadd.asp
              (regarde les formatages possibles pour compter sur le jour, le mois, etc...).
              Tu as également la possibilité de faire une boucle de traitement sur ton résultat de requête pour balayer ton tableau de résultats et comptabiliser certaines valeurs...

              Cordialement,
              Chabi01 - http://www.xlformation.com

              Commentaire


              • #8
                Avec ce post trouvé sur Google, tu dois pouvoir arriver à écrire ta requête : https://www.experts-exchange.com/que...ific-year.html

                Cordialement,
                Chabi01 - http://www.xlformation.com

                Commentaire


                • #9
                  Salut
                  1 question : Pourquoi veux tu que ca soit Mysql qui fait cette operation? C'est pour un affichage sur un site web?
                  Sinon, si c'est pour un affichage ponctuel, style powerpoint, Excel le fait carrement mieux.

                  Je partirai sur un select count(vue) from table_vue where visite > jour1 et visite < jour1 + interval 1 Week group by vue

                  Il te restera a calculer les dates avant de les inserer dans la requete.

                  Exemple de prog chez moi ( qui ne repond pas a ton pb entierement mais qui te guide, enfin si j'ai bien compris ton pb )
                  Code PHP:
                                $query->select('count( distinct pmipatid )  as count');
                                
                  $query->from($db->qn('#__log_pmi','pmi'));
                                
                  $query->from($db->qn('#__log_pat','pat'));

                                
                  $query->where($db->qn('pmipatid') . ' = ' $db->qn('patid'));
                                
                  $query->where($db->qn('pat8') . ' = ' $pat8);

                                
                  $query->where($db->qn('patid') . ' > 10 ');
                                
                  $query->where(' MONTH(pmivis)' ' = ' $mois );
                                
                  $query->where(' YEAR(pmivis)' ' = ' $annee );

                                if ( 
                  $j == $query->where($db->qn('pmivis' ) . ' < ' ' pat3 + INTERVAL 6 MONTH');
                                if ( 
                  $j == ) { $query->where($db->qn('pmivis' ) . ' >= ' ' pat3 + INTERVAL 6 MONTH'); $query->where($db->qn('pmivis' ) . ' < ' ' pat3 + INTERVAL 1 YEAR'); }
                                if ( 
                  $j == ) { $query->where($db->qn('pmivis' ) . ' >= ' ' pat3 + INTERVAL 1 YEAR'); $query->where($db->qn('pmivis' ) . ' < ' ' pat3 + INTERVAL 2 YEAR'); }
                                if ( 
                  $j == ) { $query->where($db->qn('pmivis' ) . ' >= ' ' pat3 + INTERVAL 2 YEAR'); $query->where($db->qn('pmivis' ) . ' < ' ' pat3 + INTERVAL 5 YEAR'); }
                                if ( 
                  $j == $query->where($db->qn('pmivis' ) . ' < ' ' pat3 + INTERVAL 5 YEAR');

                                
                  $db->setQuery($query);
                                
                  $rows $db->loadObjectList();
                                
                  $item->{"col".$j} = $rows[0]->count
                  ++

                  Edit : Si c'est pour faire des beaux graphiques, regarde highcharts. Tu mets ton tableau et highcharts fait le reste.
                  Check out Highcharts demos and examples to learn how to create interactive charts with Highcharts core, Highcharts Stock, Highcharts Maps, Highcharts Gantt, and Highcharts Dashboards.
                  Dernière édition par Wismer à 17/09/2018, 15h18

                  Commentaire


                  • #10
                    Bonjour,
                    Merci pour vos réponses, je vais regarder tout cela.
                    SQL car les infos sont stockées dans des tables d'une base de données.
                    Toutes les infos apportées me sont très précieuses.

                    Cordialement.

                    Eric

                    Commentaire

                    Annonce

                    Réduire
                    Aucune annonce pour le moment.

                    Partenaire de l'association

                    Réduire

                    Hébergeur Web PlanetHoster
                    Travaille ...
                    X