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 :

Une requête, deux tables, fonction COUNT


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut Une requête, deux tables, fonction COUNT
    Bonjour.

    Je cherche à utiliser la fonction COUNT mais je suis perdu.

    Dans la table phpbb_topics, je voudrais sélectionner topic_id et topic_poster ; topic_poster est lié à user_id de la table phpbb_users. Le but de la manoeuvre : obtenir un listing qui affiche le nom des membres et le nombre de sujets qu'ils ont posté, mais je bloque sur l'écriture de la requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(topic_id) AS topics FROM phpbb_topics WHERE topic_poster
    Je ne sais pas quoi ajouter pour lier les deux tables.

    Merci si vous pouvez m'aider.

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Bonjour,

    Essaie ceci :

    SELECT user_id, nom, COUNT(topic_id) FROM phpb_users
    LEFT JOIN phpbb_topics ON topic_poster=user_id
    GROUP BY user_id, nom

  3. #3
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Et bien je te remercie, c'est exactement ce que je voulais.

    Et comme le but du jeu est d'afficher les 10 meilleurs posteurs de sujets, je l'ai modifiée ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT user_id, username, COUNT(topic_id) FROM phpbb_users
    LEFT JOIN phpbb_topics ON topic_poster=user_id
    GROUP BY user_id, username ORDER BY COUNT(topic_id) DESC LIMIT 0 , 10

  4. #4
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    De rien. En fait c'est juste une jointure entre users et topics (LEFT JOIN pour sélectionner même les users qui n'ont pas de messages) et le GROUP BY précise qu'on va compter le nombre de topics pour chaque user.

  5. #5
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Ca aurait été sous Access, je n'aurais eu aucun problème pour cette requête, mais en SQL, je n'ai pratiquement aucune connaissance de la syntaxe...

  6. #6
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Je viens de changer d'hébergeur et j'ai un problème avec cette requête : elle ne fonctionne plus !

    Dans Php/Admin, j'ai cette réponse qui s'affiche alors que chez Free, elle me donne le resultat escompté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MySQL a répondu:Documentation
    #1111 - Invalid use of group function
    Que se passe-t-il ?

  7. #7
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    C'est sûrement le ORDER BY count(...) qui ne lui plait pas. Essaie de remplacer ça par un alias :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT user_id, username, COUNT(topic_id) AS nb_topics FROM phpbb_users
    LEFT JOIN phpbb_topics ON topic_poster=user_id
    GROUP BY user_id, username ORDER BY nb_topics DESC LIMIT 0 , 10

  8. #8
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Ok, ça fonctionne...

    Précision : chez Free, la version MySql était la 5, alors que sur ce serveur, c'est la 4.1.15. Peut-être que ça vient de ça ?

  9. #9
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Certainement, la 5 doit être plus restrictive au niveau de la syntaxe.

    Merci de cliquer sur Résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. enregistrer le résultat d'une requête comme table, comment fait-on ?
    Par Monbasinstinct dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/02/2007, 16h21
  2. Réponses: 4
    Dernier message: 25/09/2006, 13h53
  3. Réponses: 2
    Dernier message: 31/08/2006, 16h17
  4. NuméroAuto dans une requête création table
    Par JimmyB dans le forum Access
    Réponses: 1
    Dernier message: 08/03/2006, 14h24
  5. NuméroAuto dans une requête création table
    Par JimmyB dans le forum Access
    Réponses: 1
    Dernier message: 07/03/2006, 23h40

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