7
votes

Comment sélectionner plusieurs champs de la même ligne? (MySQL)

i Question hier à propos de l'utilisation de MySQL pour obtenir des résultats compatibles avec une enquête.

Mes positions est maintenant ma question, si j'avais une table de questions d'enquête, une table des choix de sondage et une table des utilisateurs répond à ces questions d'enquête, Comment choisir la question de l'enquête avec tous les choix de cette enquête au sein de la même requête? P>

Table des questions p>

question     choice_1  choice_2  choice_3
A or B or C     A          B        C


6 commentaires

Voulez-vous simplement les choix, ou aussi le comte? Quelle est votre "autre question" et que "maths" voulez-vous faire?


Vous ne cherchez aucune information sur la bonne réponse? Juste les possibilités de questions / choix?


@Évan: C'est une enquête, pas un test - il n'y a pas de réponse correcte.


Votre conception de base de données pourrait ne pas être normalisée. Est votre choix_id un pk? Si tel est le cas, que se passerait-il si la question_id dans la table des réponses ne correspondait pas à la question_IDE de choix_id?


Vous ne pouvez pas faire ça. Au moins, vous ne pourrez pas la récupérer avec PHP (vous pouvez réellement faire un syndicat () mais ne pourra toujours pas le chercher correctement). Ce que vous pouvez faire est de sélectionner la question, de tous les choix avec des réponses appropriées et de les exécuter à travers une boucle. Plusieurs questions aussi, OFC.


J'ai initialement pensé que cela ne pouvait pas être fait, je viens de me demander de demander. Merci à tous


4 Réponses :


4
votes

Pour obtenir les questions et les choix de chaque question:

'Foo?', 'Foo1', 66.6667
'Foo?', 'Foo2', 0.0000
'Foo?', 'Foo3', 33.3333
'Bar?', 'Bar1', 50.0000
'Bar?', 'Bar2', 50.0000


0 commentaires

0
votes
SELECT questions.question_id, questions.question, choices.choice_id, choices.question_id
FROM questions, choices 
WHERE questions.question_id = choices.question_id 
AND questions.question_id = "Something"
Should work, I think.

0 commentaires

2
votes

Notez que la table de réponses n'a probablement pas besoin de la colonne de questionnée.

Cela vous permettra de vous poser le texte, le texte de choix et le nombre de réponses par choix. P>

SELECT Questions.question, Choices.choice_text, Count(Answers.*) AS N
FROM Questions INNER JOIN Choices ON Questions.question_id = Choices.question_id
     LEFT JOIN Answers ON Choices.choice_id = Answers.choice_id
GROUP BY Questions.question_id, Choices.choice_id


3 commentaires

Et j'aimerais pouvoir donner un autre +1 pour indiquer la colonne positionnée inutile.


Malheureusement, votre requête ne semble pas fonctionner pour moi cependant. Je reçois 'Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à votre version de Server MySQL pour la syntaxe de droite à utiliser à proximité de '*) comme n des questions de questions intérieures à des choix sur les questions.Question_id = Choices.q' à la ligne 1


Cela pourrait être une différence de syntaxe entre MySQL et d'autres serveurs SQL: essayez-le sans le mot "intérieur". (Mon expérience, telle qu'elle est, est avec MS SQL Server.)



3
votes

Je suggérerais que la réponse de Mark Byers, bien que théoriquement si vous en avez besoin de "tout en une rangée", juste à des fins de visualisation mais pas dans le cadre d'une routine PHP que vous pouvez faire.

'Foo?', 'Foo1,Foo2,Foo3'
'Bar?', 'Bar1,Bar2'


0 commentaires