2011-07-06 3 views
-1

J'ai trois tables tb_poll, tb_poll_answer, tb_poll_votesComment écrire cette requête mysql?

tb_poll a id,question

tb_poll_answer a id,poll_id,answer

tb_poll_votes a id,poll_answer_id

Je veux sélectionner toutes les questions et réponses (avec nombre de votes).

Enfin je veux à la liste

Id Question   Answers 

1  Which is....?  1.PHP(70) 2.ASP(30) 3.JSP(2) 

2  ......    ....... 

Comment écrire ici la meilleure requête MySQL?

+0

Nous aimons généralement voir un peu d'effort de la part du demandeur, sur Stackoverflow. D'accord avec @Neil, qu'avez-vous essayé? Y a-t-il un problème spécifique avec la requête que vous écrivez que vous rencontrez des problèmes? –

Répondre

0

Enfin j'ai obtenu le résultat par sous requête

SELECT q.id,q.question,av.vt,GROUP_CONCAT(CONCAT(av.answer,av.vt) SEPARATOR ' ') 
AS Answers FROM tb_poll AS q LEFT JOIN 
(SELECT a.answer,a.poll_id,COUNT(v.id) AS vt FROM tb_poll_answers AS a LEFT JOIN tb_poll_votes AS v ON a.id=v.poll_answer_id GROUP BY a.id) AS av 
ON q.id=av.poll_id 
GROUP BY q.id 
2

Essayez cette requête maintenant:

SELECT q.id,q.question, 
     GROUP_CONCAT(CONCAT(a.id,'.',a.answer,COUNT(v.id) SEPARATOR ' ')) AS `Answers` 
FROM `tb_poll` AS q 
LEFT JOIN `tb_poll_answers` AS a 
    ON q.id = a.poll_id 
LEFT JOIN `tb_poll_votes` AS v 
    ON a.id = v.poll_answer_id 
WHERE 1 
GROUP BY q.id 
ORDER BY q.id 
+0

Il ne renvoie qu'une ligne et la ligne contient la colonne (Réponses) concaténation de tous tb_poll_answer – w3father

+0

@ w3father oops désolé, a oublié le groupe par bit – ianbarker

+0

Pourquoi utilisez-vous WHERE 1? wt but ici? – w3father