尝试通过测验系统获得良好的订单

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 |

【讨论】:

以上是关于尝试通过测验系统获得良好的订单的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce 获得订单总额

o2o系统功能

如何通过 Laravel 中的 API 从 Shopify 商店获取所有订单

Javascript 测验 - 通过 jQuery 上的 next() 方法到达下一个兄弟的问题

支持10倍订单增长,携程数据库架构升级实践

测验题答案