IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requêtes simples MySQL


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 22
    Points
    22
    Par défaut 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.
    Y-a-t’il une requête simple ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    regardez du côté des group by : http://sqlpro.developpez.com/cours/sqlaz/ensembles/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select ' tstjaction ', 'tstjuser', CONCAT( (month(tstjdate),YEAR tstjdate)), sum(tstjaction) 
    from tbstatjour 
    WHERE tstjdate >= '2011-01-01' 
    AND tstjdate <= '2012-02-29' 
    group by ' tstjaction ', 'tstjuser', YEAR(tstjdate), month(tstjdate)
    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.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Ça m'étonne que ta requête te retourne même ce que tu dis car tu concatènes le numéro du mois et l'année sans barre oblique.

    De plus, tu entoures les noms de colonnes d'apostrophes simples, donc en fait tu récupères les chaînes de caractères portant le nom des colonnes.

    Pour formater la date comme tu le souhaites, utilise la fonction DATE_FORMAT
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    j'ai un résultat bizarre
    avec la requête de départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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 ?

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Encore une fois, entourer le nom d'une colonne d'apostrophe revient à n'avoir que le nom de cette colonne et non pas les données qu'elle contient !
    La requête que tu affiches ne peut pas donner le résultat que tu prétends !

    De plus, les valeurs textuelles s'entourent, elles, d'apostrophes et pas de guillemets en SQL, même si avec certains SGBD ça peut marcher aussi avec des guillemets. Inutile par contre de mettre des apostrophes autours de valeurs numériques.

    Tu n'as pas compris le fonctionnement de DATE_FORMAT. À partir d'une donnée de type DATE, elle rend la date sous le format spécifié par le second argument de la fonction.

    Ta requête devrait plutôt être celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT tstjaction, tstjuser, 
      DATE_FORMAT(tstjdate, '%m/%Y' ) AS mois_annee, 
      sum( tstjaction ) AS somme
    FROM tbstatjour 
    WHERE tstjuser = 'administrateur' 
      AND tstjdate BETWEEN  '2011-01-01' AND '2012-02-29' 
      AND tstjaction = 1 
    GROUP BY tstjaction, tstjuser, DATE_FORMAT(tstjdate, '%m/%Y' )
    Remarque au passage l'utilisation de BETWEEN qui est plus performant que >= AND <=, l'utilisation des balises CODE et la mise en forme correcte de la requête, ce qui la rend plus agréable à lire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [MySQL] Requête simple MySQL
    Par smp82 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/12/2008, 18h56
  2. [MySQL]Aide pour requête simple
    Par Pill_S dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2007, 10h40
  3. Problème sur requête insert mysql
    Par kcizth dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/02/2006, 18h37
  4. Performance de la requête connexion à MySQL
    Par yazerty dans le forum Requêtes
    Réponses: 5
    Dernier message: 22/12/2005, 14h40
  5. [DEBUTANT] TSqlQuery & requête simple
    Par fred64 dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/04/2004, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo