Requêtes simples MySql

arrakis75 Messages postés 148 Statut Membre -  
loicDu28 Messages postés 342 Statut Membre -
Requêtes simples MySql

Bonjour j'ai un tableau MySQL qui compte les visiteurs d'un site.
Composé de 4 champs : utilisateur, page, date, adresse IP
Userpierre, page1, 2006-06-09, 10.175.252.8
Userlaurent, page1, 2006-06-09 , 10.175.248.136
Usermichele, page2, 2006-06-09 172.19.108.23
...

J'aimerais faire plusieurs tableaux par type de page et après dans chaque tableau compter le nombre de fois qu'un utilisateur est venu dans le mois.
table Page1,
Utilisateur moisjanvier2011, moisfevrier... , moisjanvier2012
userpierre, 5 10 5
userpaul 2 1 5
...

Y-a-t'il une requête simple ?

7 réponses

  1. loicDu28 Messages postés 342 Statut Membre 53
     
    Bonjour,

    Le problème doit provenir d'une mauvaise utilisation de la fonction DATE_FORMAT.
    Peut-être qu'en premier paramètre, la fonction à besoin d'une date entière dans un format spécifique.
    Je te laisse explorer le problème en ce sens.

    Cordialement.

    1
  2. loicDu28 Messages postés 342 Statut Membre 53
     
    Bonjour,

    Ta requête serait de la manière suivante : Il faut compter le nombre de ligne par utilisateur et par page pour une durée donnée (début du mois jusqu'à la fin du mois).
    Je te laisse essayer un peu de ton côté et si tu n'y arrive pas, tu me montre ce que tu as fait et j'essayerai de t'aider.

    Cordialement.
    0
  3. arrakis75 Messages postés 148 Statut Membre
     
    En cherchant une lisibilité dans le résultat, j'ai changé quelques trucs
    Résultat voulu
    Page, utilisateur, date (mois/année), AdditionVu
    page1 userpierre 01-2011 15
    page1 userjean 01-2011 9
    ...
    page1 userpierre 02-2011 10
    .....
    Page2 userjean 01-2011 4
    ...

    Je suis proche du résultat avec ma requete
    select ' tstjaction ', 'tstjuser', YEAR(tstjdate), month(tstjdate), sum(tstjaction)
    from tbstatjour
    WHERE tstjdate >= '2011-01-01'
    AND tstjdate <= '2012-02-29'
    group by ' tstjaction ', 'tstjuser', YEAR(tstjdate), month(tstjdate)

    J'ai un souci sur la date que j'affiche actuellement sur 2 colonnes
    0
  4. loicDu28 Messages postés 342 Statut Membre 53
     
    Pour que tu obtienne la date sur une colonne, il faut que tu concataine les 2 colonnes concernant les dates : YEAR(tstjdate), month(tstjdate)
    Je te conseil d'aller voir vers la méthode CONCAT.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. arrakis75 Messages postés 148 Statut Membre
     
    Ok merci, j'ai utilisé la fonction CONCAT,
    Par contre j'ai mes dates au départ sous forme 2011-01-01, quand je fais CONCAT( (month(tstjdate),YEAR tstjdate)); j'ai en résultat 1/2011 et non 01/2011 .
    y-a-t'il un moyen de ce champ comme date (au pire transformer les 1 en Jan, etc... ?
    Parce qu'après je l'exporte en Excel.
    0
  7. loicDu28 Messages postés 342 Statut Membre 53
     
    Bonjour,

    Désolé de répondre que maintenant.
    Pour résoudre ce problème tu peux essayer :
    DATE_FORMAT(CONCAT( (month(tstjdate),YEAR tstjdate)),%m/%Y)
    

    Je te laisse tester ça.

    Cordialement.
    0
  8. arrakis75 Messages postés 148 Statut Membre
     
    j'ai un résultat bizarre
    avec la requête de départ
    select 'tstjaction','tstjuser', CONCAT( month(tstjdate), YEAR (tstjdate)) AS DATE, sum(tstjaction) from tbstatjour WHERE 'tstjuser' = "administrateur"
    AND tstjdate >= '2011-01-01' AND tstjdate <= '2012-02-29' AND 'tstjaction' = '1'
    group by 'tstjaction','tstjuser', YEAR(tstjdate), month(tstjdate)
    j'ai le résultat
    tstjaction tstjuser DATE sum( tstjaction )
    1 administrateur 12011 2
    1 administrateur 22011 7
    1 administrateur 42011 2
    1 administrateur 72011 1
    1 administrateur 122011 3

    en utilisant DATE_FORMAT
    SELECT 'tstjaction' , 'tstjuser' , DATE_FORMAT( CONCAT( month( tstjdate ) , YEAR( tstjdate ) ) , '%m/%Y' ) AS DATE, sum( tstjaction ) FROM tbstatjour WHERE 'tstjuser' = "administrateur" AND tstjdate >= '2011-01-01' AND tstjdate <= '2012-02-29' AND 'tstjaction' = '1' GROUP BY 'tstjaction' , 'tstjuser' , YEAR( tstjdate ) , month( tstjdate )
    tstjaction tstjuser DATE sum( tstjaction )
    1 administrateur 01/2012 2
    1 administrateur 01/2022 7
    1 administrateur 01/2042 2
    1 administrateur 01/1972 1
    1 administrateur NULL 3

    une idée sur le problème du champ date (essayer avec %c ou %e idem),
    pourquoi il commence par prendre le champs année sur 2 chiffres ?
    0