尝试通过测验系统获得良好的订单
Posted
技术标签:
【中文标题】尝试通过测验系统获得良好的订单【英文标题】:Trying to get a good order with quiz system 【发布时间】:2013-01-05 18:18:13 【问题描述】:我正在尝试制作一个测验系统,但它输出:
Question1
Answer1
Question1
Answer2
等等..而不是
Question1
Answer1
Answer2
... and so on
我该如何解决这个问题?
代码:
$question = mysql_query("SELECT questions.*, answers.* FROM questions inner join answers on questions.id=answers.question_id");
while($row = mysql_fetch_assoc($question))
echo $row['question'].'<br />' .$row['answer'].'<br />';
【问题讨论】:
你在选择查询中选择问题和答案表中的所有值,你可以只选择问题和答案? mysql_* 已弃用,请使用 PDO 或 mysqli: php.net/manual/en/mysqlinfo.api.choosing.php 【参考方案1】:修复您的 WHILE 循环。它总是会打印问题和答案。快速修复看起来像这样:
$previousQuestion = null;
while($row = mysql_fetch_assoc($question))
if($row['question'] !== $previousQuestion)
echo $row['question'].'<br />';
echo $row['answer'].'<br />';
$previousQuestion = $row['question'];
可以通过其他方式简化语法,但这会起作用。基本上,由于问题与其答案之间存在一对多关系,因此仅在与上一行的问题不同时才打印该问题。
【讨论】:
我现在只看到答案,没有问题的输出。 哦,我明白你的意思了。实际上你应该只看到第一个问题。对不起,我误解了你的意思,所以我的回答不正确。给我一秒钟修复它。 @MichaelNaidis 查看我的编辑。我没有时间测试它,但语法应该可以。【参考方案2】:如果你只想在 MySQL 中这样做,你可以这样做:
SELECT question AS 'Question And Its Answers'
FROM
(
SELECT 0 AS Type, id, question FROM questions
UNION ALL
SELECT 1, question_id, answer FROM answers
) t
ORDER BY id, Type;
SQL Fiddle Demo
这会给你:
| QUESTION AND ITS ANSWERS |
----------------------------
| question1 |
| eee |
| dd |
| dsd |
| question2 |
| df |
| fd |
| question3 |
| ans |
| dd |
| ad |
【讨论】:
以上是关于尝试通过测验系统获得良好的订单的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Laravel 中的 API 从 Shopify 商店获取所有订单