我对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; ?>
答案 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