简单的mySql JOIN在一个sql语句中检索问题和多项选择答案

时间:2014-08-27 13:40:55

标签: php mysql

我正在构建此表单:http://pwmn.73dpi.com/questionnaire.php并在数据库中将问题和答案放在两个单独的表中。

以下是两个db表的确切结构:

表格[问题]

id  
order   
text

表格[答案]

id  
fk_question 
order   
text    
points

答案表与fk_question字段中的问题相关。

这是我的疑问:

SELECT
  Q.id, Q.text, R.text, R.order AS rorder
FROM
  `questions` Q
  LEFT JOIN reponses R
    ON Q.id = R.fk_question 

上述查询的结果是:

id  qtext   rtext   rorder
1   Vous discutez avec un commerçant et malgré le fait...   Vous passez à l'anglais. Si ça peut lui faire plai...   1
1   Vous discutez avec un commerçant et malgré le fait...   Vous lui faites remarquer et lui demandez s'il peu...   2
1   Vous discutez avec un commerçant et malgré le fait...   Vous continuez à lui parler en français, mais vous...   3
2   En faisant vos courses, vous remarquez que la boît...   Vous achetez le produit sans en faire de cas.   1
2   En faisant vos courses, vous remarquez que la boît...   Vous achetez le produit, mais vous prenez auparava...   2
2   En faisant vos courses, vous remarquez que la boît...   Vous achetez le produit et vous contactez la compa...   3
3   Vous revenez d'un voyage à l'étranger et devez vou...   Vous faites valoir votre droit de vous faire servi...   1
3   Vous revenez d'un voyage à l'étranger et devez vou...   Vous prenez place devant le  guichet d'à côté, mai...   2
3   Vous revenez d'un voyage à l'étranger et devez vou...   Vous prenez place devant le guichet d'à côté, et v...   3
4   Dans la salle d'attente chez le médecin, vous comm...   Vous arrachez discrètement la page du mot croisé p...   1
4   Dans la salle d'attente chez le médecin, vous comm...   Vous laissez le mot croisé et replacez le magazine...   2
4   Dans la salle d'attente chez le médecin, vous comm...   Vous prenez la peine d'effacer les réponses que vo...   3
5   Dans des toilettes publiques, vous remarquez qu'un...   Vous sortez un stylo et vous corrigez l'erreur. 1
5   Dans des toilettes publiques, vous remarquez qu'un...   Vous sortez un stylo et biffez l'erreur en ajoutan...   2
5   Dans des toilettes publiques, vous remarquez qu'un...   Vous ne vous en préoccupez pas. 3
6   Vous êtes chargé de mener une réunion d'affaire av...   Vous proposez que la réunion se déroule en françai...   1
6   Vous êtes chargé de mener une réunion d'affaire av...   Vous proposez que la réunion se déroule en anglais...   2
6   Vous êtes chargé de mener une réunion d'affaire av...   Vous proposez que la réunion se déroule en françai...   3
7   Lors d'une visite guidée de Calgary, le guide tour...   Vous levez la main pendant la visite pour corriger...   1
7   Lors d'une visite guidée de Calgary, le guide tour...   Vous ne dites rien tout de suite, mais vous ne man...   2
7   Lors d'une visite guidée de Calgary, le guide tour...   Vous retournez à vos courriels sur votre téléphone...   3
8   Vous venez de vous acheter un ordinateur portable ...   Vous gardez l'anglais comme langue principale.  1
8   Vous venez de vous acheter un ordinateur portable ...   Vous gardez l'anglais pour l'instant, histoire de ...   2
8   Vous venez de vous acheter un ordinateur portable ...   Vous réinstallez le disque immédiatement et choisi...   3
9   Vous discutez en anglais au téléphone avec un prép...   Vous lui proposez de revenir à l'anglais.   1
9   Vous discutez en anglais au téléphone avec un prép...   Vous prenez votre mal en patience, et lorsque vous...   2
9   Vous discutez en anglais au téléphone avec un prép...   Vous continuez la conversation en français mais vo...   3
10  Alors que vous faites vos courses, un homme vous d...   Vous atténuez quelque peu les propos du client, qu...   1
10  Alors que vous faites vos courses, un homme vous d...   Vous demandez au client de se trouver un(e) autre ...   2
10  Alors que vous faites vos courses, un homme vous d...   Vous traduisez ses propos tels quels, en soulignan...   3

现在我正在使用两个单独的数据库调用来完成问题和答案检索。我知道这不是最佳的,可以通过某种方式使用SQL连接来完成。

以下是问题的当前SQL:

SELECT * FROM questions Q ORDER BY Q.order

和答案:

SELECT * FROM reponses R WHERE R.fk_question = $questionId ORDER BY R.order

使用这个SQL我可以得到所有答案,但后来我失去了实际的问题......

SELECT
  *
FROM
  questions Q
  LEFT JOIN reponses R
    ON Q.id = R.fk_question
ORDER BY
  Q.order

理想的回答是一排一排,一列包含列出答案的数组......

我打开了更改db结构或sql调用...我已经能够获得每个问题的1row和一个列出所有答案的列使用这个sql:

SELECT Q.id,Q.text, GROUP_CONCAT(R.text), R.order AS rorder
FROM `questions` Q
LEFT JOIN reponses R ON Q.id = R.fk_question 
GROUP BY Q.id

但不太确定这种格式是否最好... id需要处理文本字段中的逗号并在php中转换为实际数组...

现在有两个单独的电话似乎更清楚并且有效...

这是我在这个网站上的第一篇文章,所以如果有什么不清楚的话请告诉我,并提前多多感谢!

0 个答案:

没有答案