Titre: Requete MySQL compliquée
Posté par: tavman le le 25-01-2007 a 19:59:18
Salut tout le monde.
Voila, j'aimerai faire une requete MySQL qui semble assez simple mais qui en fait est plutot compliquée (enfin peut etre pas)
Tout d'abord, voici mes 3 tables :
Code:
USER +---------+-------------+ | id_USER | pseudo_USER | +---------+-------------+
QUESTION +-------------+---------+------------------+ | id_QUESTION | id_USER | CONTENU_QUESTION | +-------------+---------+------------------+
REPONSE +------------+-------------+---------+-----------------+ | id_REPONSE | id_QUESTION | id_USER | CONTENU_REPONSE | +------------+-------------+---------+-----------------+ |
|
Bon j'ai un peu simplifier tout ca... mais en gros, c'est ca.
Ce que j'aimerai bien faire, c'est quelque chose qui ressemble a ceci : SELECT COUNT(DISTINCT z.id_REPONSE ) AS nb_REPONSES, x.pseudo_USER, y.id_QUESTION, y.CONTENU_QUESTION FROM USER x INNER JOIN QUESTION y ON x.id_USER = y.id_USER, REPONSE z GROUP BY y.id_QUESTION=z.id_QUESTION
En gros, je voudrai en une seule requete avoir : - le pseudo du type qui a poster la question - la question - l'ID de la question (pour faire des liens) - le nombre de réponses a la question
Mon problème est sur le nombre de réponses. J'ai cherché un peu dans tous les sens de plusieur façon, sans succès... Quelqu'un a une idée ? |
Titre: Re:Requete MySQL compliquée
Posté par: MarvinLeRouge le le 25-01-2007 a 20:45:07
Salut,
Je reformule ta requète afin d'être sûr d'avoir bien compris : Tu veux la liste des questions posées, avec pour chaque question, - le pseudo de l'utilisateur ayant posé la question - le libellé de la question - l'id de la question - le nombre de réponses à la question
C'est bien ça ? |
Titre: Re:Requete MySQL compliquée
Posté par: tavman le le 25-01-2007 a 20:54:35
Ouep c'est exactement ca Marvin... Le seul point ou ca bloc, c'est le COUNT / GROUP BY et j'y arrive pas du tout... Et effectivement, je vient de voir que le GROUP BY que j'avais mis est complètement nase :
y.id_QUESTION=z.id_QUESTION
ca veut pas dire grand chose.. mais j'avais tellement tout retourner e truc dans tous les sens que..
Donc oui Marvin, pour chaque question, je veux - le pseudo de l'auteur de la question (ca c'est OK) - le libellé de la question (OK) - l'id de la question (OK) - le nombre de réponses a la uestion (ca bloc)
Je veux pas les réponses elles mêmes, mais juste le nombre de réponses... |
Titre: Re:Requete MySQL compliquée
Posté par: tavman le le 25-01-2007 a 22:12:51
BINGOOOOOOOOOOOOOOO
La solutionb (si a interresse quelqu'un d'avoir la réponse) :
SELECT SUM ( y.id_QUESTION=z.id_QUESTION AND z.id_REPONSE ) AS nb_REPONSES, x.pseudo_USER, y.id_QUESTION, y.CONTENU_QUESTION FROM USER x JOIN QUESTION y ON x.id_USER = y.id_USER, REPONSE z GROUP BY y.id_QUESTION
Bon OK : j'y comprend pas grand chose mais.... ca fonctionne bien :D |
Titre: Re:Requete MySQL compliquée
Posté par: MarvinLeRouge le le 25-01-2007 a 23:31:38
Bein moi j'avais trouvé ça :
Code:
select qu.idQuestion, qu.libelle, us.pseudo, count(re.idReponse) from questions qu inner join users us on qu.idUser = us.idUser left outer join reponses re on re.idQuestion = qu.idQuestion group by re.idQuestion |
|
Bon, je te laisse remettre les bons noms de tables / champs. |
Titre: Re:Requete MySQL compliquée
Posté par: tavman le le 25-01-2007 a 23:36:05
Heuu j'ai pas testé ton truc Marvin mais j'avais trouvé un truc qui marchai SAUF quand il n'y avait pas de réponses... (en gros, si yavait pas de réponses, ca me mettait même pas la question).
Bon je regarderai ta soluce après... et je ferai un petit test pour savoir lequel est le mieux... |
Titre: Re:Requete MySQL compliquée
Posté par: MarvinLeRouge le le 26-01-2007 a 12:45:15
| Sauf erreur de ma part, la mienne marche aussi s'il n'y a pas de réponses ;) |
Titre: Re:Requete MySQL compliquée
Posté par: tavman le le 26-01-2007 a 12:47:14
| Ahh c'est le left outer join... 'tain mais je connait trop pas ces machins là.... faudrai que je prenne des cours de MySQL poussé... |
Titre: Re:Requete MySQL compliquée
Posté par: MarvinLeRouge le le 26-01-2007 a 15:57:32
Petit cours rapide : inner join : je prends dans la table A et la table B, pourvu que l'élément de jointure existe dans les 2 left (outer) join : je prends dans la table A TOUJOURS, et dans la table B si l'élément y existe (et je prends null à la place sinon) right (outer) join : la même chose, mais en prenant B come référence au lieu de A |
Titre: Re:Requete MySQL compliquée
Posté par: tavman le le 26-01-2007 a 16:04:26
| ah ouep OK effectivement, c'est ce qu'il me fallait... jme doutait bien que puisque y avait inner, devait y avoir outer, mais comme je savait pas a quoi servait inner et que le outer tout seul fonctionnait pas... |
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|