php - PHP 和 mySQL 中的多个 SELECT 查询和循环结果

标签 php mysql sql arrays

我正在尝试学习在 PHP 和 mySQL 中使用多个 SQL 查询的最佳实践。不确定我是否应该有两个单独的查询,或者我是否应该将我的查询合并(或 UNION?)。

我可以执行以下操作还是有其他方法可以完成同样的事情?

请务必注意,我的第一个查询是提取测验的问题和答案列表。第二个查询是提取一个分数配置文件列表,我将使用它根据用户的测验分数分配给他们。这两个表之间的唯一关系是它们都使用相同的外键链接到我的“测验”表中的 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 将我的查询合并为一个?

如果是这样,我如何编写我的条件以了解我循环的结果是什么?

非常感谢!

最佳答案

我建议坚持当前的方法,除非存在严重的性能问题 - 结合这两个查询可能会(略微)提高总吞吐量,但会显着增加显示它所需的代码的复杂性。

关于php - PHP 和 mySQL 中的多个 SELECT 查询和循环结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838899/

相关文章:

php - 无法在 Excel 中手动发送 Lotus Notes 电子邮件

php - 无法将字符串转换为整数

mysql - Node : binding error in query with like

sql - 查询 Oracle 以获取 ORA 代码错误详细信息

mysql - 如何创建复合键?

php - (Cake)PHP - 使用来自主数据库的数据更新子数据库

php - 不允许执行您请求的操作。代码点火器

php - 处理程序类错误 - Laravel

mysql - 如何使用变量来完成存储过程中的插入

mysql - Linux 上的 RMySQL(但不是 OSX 或 Windows)提供垃圾数据