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ête count sur deux tables


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut requête count sur deux tables
    Bonjour,

    J'ai un problème avec une requête. En bon Français elle cherche à dire :
    "Compte le nombre de commentaire pour lesquels il y a au moins une réponse provenant de ce membre".

    Mais quand elle passe à l'action avec mysql_fetch_row() dePHP ça donne une erreur .

    Voici la bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT count(commentaire.id) AS id  
    FROM commentaire 
    WHERE sousCommentaire.idMembre='".$numeroConnexion."' 
    AND sousCommentaire.idCom=commentaire.id
    Donc idMembre c'est le numéro du membre, $numeroConnexion provient de la session php et la clef étrangère entre sousCommentaire et commentaire est idCom=id.

    Voilà j'espère que vous saurez me débloquer ce truc là, merci.
    C'est pas parce que j'ai tort que vous avez raison.

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    quel est le problème?
    Un petit descriptif de tes tables serait aussi un plus pour comprendre

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Salut Cybher,

    En fait le problème est très simple, je dois compter le nombre de résultat, puis le diviser par 10 pour l'afficher sur des pages séparées.
    Cela c'est en php, pas de problème.

    Mais je n'arrive pas à trouver le bon résultat.
    Pour le descriptif des tables, je ne vois pas trop l'intérêt puisque je ne cherche pas à afficher quoi que ce soit.
    Cela doit être suffisant :
    Les commentaires ont un un champs id autoincrémenté, dans la table commentaire.
    Les réponses ont un champs id autoincrémenté, dans la table sousCommentaire.
    Le champs sousCommentaire.idCom est équivalent au champ commentaire.id.
    les deux tables comportent un champ idMembre, qui est l'id du membre.

    Voilà, donc je dois compter tous les commentaires qui ont au moins une réponse provenant du membre.
    C'est pas parce que j'ai tort que vous avez raison.

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    essaie ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(distinct idCom) 
    FROM souscommentaire 
    WHERE idMembre='".$numeroConnexion."'

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    ça fonctionne merci mais...
    C'est pas parce que j'ai tort que vous avez raison.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    ...j'ai besoin de compliquer la requête :

    Il ne faut pas qu'elle sélectionne les commentaires dont l'idMembre est celui du membre.

    Donc il s'agit de compter les sousCommentaire.idCom distincts, dont le champ sousCommentaire.idMembre n'est pas le même que celui de commentaire.idMembre là où sousCommentaire.idCom = commentaire.id .

    j'espère que vous pourrez m'aider parce que là je sèche complètement.
    C'est pas parce que j'ai tort que vous avez raison.

  7. #7
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    J'ai un doute sur la structure mais je suppose que l'on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE Commentaire (
       id SMALLINT,
       idCom SMALLINT,
       idMembre SMALLINT,
       message VARCHAR(10)
    );
    avec Commentaire.idCom comme clef étrangère sur Commentaire.id et Commentaire.id comme clef primaire. Si ce sont deux tables séparées il faudra corriger un brin.

    Avec un mySQL (assez récent peut-être) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COUNT(C1.id)
    FROM Commentaire C1
    WHERE EXISTS (SELECT * FROM Commentaire C2 WHERE C2.idCom=C1.id AND C2.idMembre!=C1.idMembre AND C2.idMembre='".$numeroConnexion."');
    ou alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COUNT(C1.id)
    FROM Commentaire C1 JOIN Commentaire C2 ON (C2.idCom=C1.id AND C2.idMembre!=C1.idMembre AND C2.idMembre='".$numeroConnexion."')
    GROUP BY C1.id;
    Edit: un clic mal placé, j'avais pas fini

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Salut Sivrît, merci pour ta réponse.

    Alors je viens de regarder ta requête, honnêtement j'y comprend rien je peux pas la modifier.
    Or il me semble qu'il faut la modifier puisque comme tu le dis ce sont deux tables séparées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CREATE TABLE 
    commentaire 
    (
       id SMALLINT,
       idMembre SMALLINT,
       message VARCHAR(10)
    );
     
    CREATE TABLE 
    sousCommentaire 
    (
       id SMALLINT,
       idCom SMALLINT,
       idMembre SMALLINT,
       message VARCHAR(10)
    );
     
    Avec sousCommentaire.idCom=commentaire.id
    Donc ici, je réexplique au cas où, il s'agit d'aller chercher toutes les sujets (table commentaire) pour lesquels au moins une réponse (table sousCommentaire) a été postée par idMembre, à condition que le commentaire lui même ne soit pas d'idMembre.
    On exclu donc les sujets proposés par le membre auxquels il a lui même apporté une ou plusieurs réponses.
    C'est pas parce que j'ai tort que vous avez raison.

Discussions similaires

  1. [2008R2] COUNT nombre par jour multicriteres sur deux tables
    Par y.bouet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/06/2014, 08h34
  2. Requête sur deux tables avec fonction COUNT
    Par islande dans le forum Langage SQL
    Réponses: 13
    Dernier message: 12/08/2013, 16h06
  3. Requete avec deux count sur 3 tables
    Par patoupatou34 dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/08/2009, 08h57
  4. COUNT/JOIN sur deux tables
    Par rozwel dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/08/2008, 17h27
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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