我有以下数据库结构。
问题表。
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...............
答案 0 :(得分:1)
使用联接:
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
元素。