我正试图学习PHP和MySQL中的多个SQL查询的最佳实践。不知道我是否应该有两个单独的查询,或者如果我应该加入(或联合?)我的查询到一个。多个SELECT查询和循环遍历PHP和mySQL结果
我可以做以下事情还是有另一种方式来完成同样的事情?
请务必注意,我的第一个查询是提取问题和答案的测验列表。第二个查询是拉取我将用于根据测验分数分配给用户的分数配置文件列表。这两个表之间的唯一关系是两者都使用与我的“测验”表中链接到ID的相同外键。我不需要并排连接这些表,但我想我可能需要将它们联合起来,这样我的第二个查询结果才会出现在第一个查询结果之后。
现在,如果我应该将我的查询合并为一个,我不知道如何循环查询结果来创建我的数组。当我遍历每个结果时,我会需要一些条件逻辑来处理我的第一个查询结果,而另一些查询结果则与我的第二个查询结果不同。我会如何写这些条件?
这是我现在正在做的,这似乎是两个单独的查询工作的罚款...
......在数据库中查询第一时间让我的问答题和答案:
$result_quiz = mysql_query("
SELECT quiz_question.question_text, quiz_question.id, quiz_answer.answer_text, quiz_answer.points
FROM quiz
JOIN quiz_question ON (quiz.id = quiz_question.quiz_id)
JOIN quiz_answer ON (quiz_question.id = quiz_answer.quiz_question_id)
WHERE quiz.id = $id;
");
......然后根据上面的查询,建立我的问题和答案数组:
$quiz = array();
while ($row = mysql_fetch_assoc($result_quiz)) {
if (!isset($quiz['questions']['q'.$row['id'].''])) {
$quiz['questions']['q'.$row['id'].''] = array(
'question' => $row['question_text'],
'answers' => array()
);
}
$quiz['questions']['q'.$row['id'].'']['answers'][] = array('answer' => $row['answer_text'],'points' => $row['points']);
}
......然后查询数据库的第二次拿到得分配置文件的列表:
$result_profile = mysql_query("
SELECT quiz_profile.name, quiz_profile.description, quiz_profile.min_points, quiz_profile.max_points
FROM quiz
JOIN quiz_profile ON (quiz.id = quiz_profile.quiz_id)
WHERE quiz.id = $id;
");
......然后通过我的第二个查询循环,所以我可以追加分数型材我数组:
while ($row = mysql_fetch_assoc($result_profile)) {
$quiz['profiles'][] = array('name' => $row['name'],'description' => $row['description'],'min_points' => $row['min_points'],'max_points' => $row['max_points']);
}
这是最好的方法?
或者我应该将我的查询合并为一个使用UNION?
如果是这样,我该如何写我的条件来知道我循环的结果?
非常感谢!