J'ai une requête qui extrait les questions d'une table et les réponses d'une autre.Comment rendre cette requête plus facile à écrire
SELECT
questions.question,
questions.answers,
(SELECT COUNT(answer) FROM answers WHERE question_id = 1 AND answer = 1
GROUP BY answer) as ans1,
(SELECT COUNT(answer) FROM answers WHERE question_id = 1 AND answer = 2
GROUP BY answer) as ans2
FROM questions
WHERE questions.id = 1
Bien que cela fonctionne, je n'aime pas l'idée d'ajouter un sous-requête supplémentaire pour chaque réponse (questions.answers
est une chaîne par des virgules seperated réponses possibles). C'est faisable mais je suis sûr qu'il doit y avoir un meilleur moyen. L'essentiel est que différentes questions ont des nombres de réponses différents.
Y a-t-il une meilleure façon de faire ou est-ce une façon acceptable de faire les choses? J'imagine que plusieurs sous-sélections dans une requête pourraient avoir un (petit) succès de performance dans le futur (pas que je sois encore un test de performance).
Si c'est applicable, je ne m'attends pas à avoir plus de 5 réponses par question.
C'est beaucoup plus propre - je suppose que je suis obligé d'ajouter une sorte de somme ou sous-sélection pour chaque réponse à la question alors? – Ross
Si vous les voulez dans des colonnes séparées, oui. J'ai écrit le SQL ci-dessus en supposant que vous vouliez que la requête retourne le même résultat que la requête dans votre question initiale. –
D'où vient le tableau des réponses? cela n'apparaît pas dans la question originale. Aussi, vous semblez faire une somme sur la valeur totale de la réponse, ce qui donnerait au nombre d'apparences multiplié par la valeur de la réponse. Vous pouvez utiliser une instruction CASE pour contrôler cela (voir ma réponse) –