【问题标题】: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 />';            
}

【问题讨论】:

标签: php html mysql phpmyadmin while-loop


【解决方案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 |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2011-10-17
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多