PHP MYSQL分组结果

时间:2017-10-28 13:19:07

标签: php mysql sql

我对PHP MYSQL有疑问:

以下是我的情景:

我有一个名为question的表和另一个名为choices的表。

tbl_question

id
title

tbl_choices

id
question_id
title

每个选项都与一个问题相关联。所以一个问题可以有很多选择。

我的问题是在php中显示它

我的查询是:

SELECT  question.id,
        question.survey_id,
        question.title,
        question.type,
        choices.id,
        choices.title        
FROM    question        
        INNER JOIN choices
        ON question.id = choices.question_id

因此,结果将显示与某个问题相关的所有选项。但它也会在每一行显示相同的问题。

在PHP中,这是我想要输出的内容:

How's your momma?
-happy
-not happy

只需显示一次问题,然后显示以下所有选项。但如果我有三个选择并做一个循环,它将显示问题和一个选择,并做三次。

你会帮助我实现这个目标吗?我希望我能很好地解释自己。谢谢。任何帮助/建议将不胜感激。

编辑:

<?php
if ($questions):
$ctr = 0;
$current_question = '';
foreach ($questions as $question):
    $ctr++;

    ?>

    <div class="panel panel-default">
        <div class="panel-heading">
            <?php
            if ($current_question != $question['question_title'])
            {
                $current_question = $question['question_title'];
                echo $ctr . '. ' . $question['question_title'];
            }
            ?>
        </div>
        <div class="panel-body"><?php $question['choices_title'];?></div>
    </div>
    <?php
endforeach;
endif; ?>

2 个答案:

答案 0 :(得分:1)

我会把它分成两个选择。 首先选择问题,然后选择答案。

所以你将获得两个Arrays并且能够通过question_id循环遍历两个Arrays。

但是使用给定的select语句,您需要创建一个包含唯一问题的数组,或者只是不再输出问题。

你的结果如何?由于名称'title'不是唯一的,我认为question.title被choises.title覆盖。

你也没有给我们你的输出部分。

f.E:

$val = '';
foreach($queryResult as $row) {
  if($val != $row['type']) {
    echo $row['type'] . PHP_EOL . $row['title'] . PHP_EOL;
    $val = $row['type'];
  }
  else {
    echo $row['title'] . PHP_EOL;
  }
}

答案 1 :(得分:0)

这是一个单独的SQL来执行此操作(抱歉格式化)。只需在php中运行sql和循环,不需要检查内部循环,因为结果集是你想要的sql

 Select title From(Select 1 ordby ,  question.title from question Where question.id = 1 Union all Select 2 ordby , '-'+choice.title from choice where question_id =1) Order by ordby