gpt4 book ai didi

mysql - 优化数据库查询

转载 作者:行者123 更新时间:2023-11-29 00:28:06 25 4
gpt4 key购买 nike

我有以下数据库结构。

问题表。

id  question               desc
1 What was john's age? About john

选项表

id  question_id  option_value    correct_ans
1 1 20 0
2 1 18 0
3 1 28 1
4 1 60 0

现在我想从两个表中获取所有问题及其选项的记录。我想要以下结构。我编写了代码并得到了结果,但它需要两个 sql 查询。首先从问题表中获取所有问题,然后创建一个数组,然后获取所有问题的选项并放入数组中。是否可以使用单个查询获取此类数据?

      array([0]=array('question_id'=>1,
'question'=>'what was john's age',
'desc'=>'About john',
'options'=>array([0]=>array('option_id'=>'1',
'option_value'=>20,
'correct_ans'=>0),
[1]=>array('option_id'=>'2',
'option_value'=>18,
'correct_ans'=>0),
[2]=>array('option_id'=>'3',
'option_value'=>28,
'correct_ans'=>1),
[3]=>array('option_id'=>'4',
'option_value'=>60,
'correct_ans'=>0)
)
),
[1]=array('question_id'=>2,
etc...............

最佳答案

使用连接:

SELECT q.id question_id, question, desc, o.id option_id, option_value, correct_ans
FROM question q
LEFT JOIN option o
ON q.id = o.question_id
ORDER BY question_id, option_id

这使用了 LEFT JOIN,因此即使 options 表中没有出现任何选项,您也会获得有关问题的信息(options 表中的列将是 NULL 在这种情况下)。如果不允许这样做,您可以改用 INNER JOIN。

这个查询的结果会重复每一行的问题信息。从结果创建数组的循环必须检查 question_id 是否已从上一行更改。如果有,它开始一个顶层数组的新元素;如果 question_id 相同,则添加到当前数组元素的 options 元素中。

关于mysql - 优化数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18030207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com