我不确定这在mysql中是否可行,但我正在尝试用查询而不是php来构建嵌套对象。我有一个调查结果的数据库,我想构建一个对象,其关键是问题,值是答案的数组/对象。这可能吗?我正在使用这样的东西:
SELECT
ss.*,
(SELECT int_value FROM `SubmittedQuestions` AS su WHERE ss.id = su.submitted_survey_id)
FROM
`SubmittedSurveys` as ss;
我是否必须在PHP中构建此对象?我的问题是我在PHP中进行所有这些循环,我认为构建对象需要一段时间,而如果我能在mysql中完成它,我认为这是一个快速查询。让我知道你对这个问题的想法。
我正在寻找这样的对象:
调查:{ 问题1:[ 回答1, 回答2], 问题2: [ 回答1, 回答2] }
所以我目前在php中所做的是查询一个表中的所有调查问题,然后使用该对象,我遍历并查询每个问题并从另一个表中获取答案。如果有很多问题,这个设计会非常缓慢,有人可以提出替代方案吗?
答案 0 :(得分:3)
你描述过你已经做过的事情可能是最好的。您可以使用JOIN一次性检索所有内容,例如:
SELECT *
FROM surveys s INNER JOIN questions q
ON s.id = q.survey_id
INNER JOIN answers a
ON q.id = a.question_id
WHERE s.id = $submitted_survey_id
结果如下:
survey1,question1,answer1
survey1,question1,answer2
survey1,question1,answer3
survey1,question2,answer1
survey1,question2,answer2
survey1,question2,answer3
survey1,question3,answer1
survey1,question3,answer2
survey1,question3,answer3
...
但是你仍然需要编写逻辑来将这些结果分成一个理智的数据结构,并且你从数据库中检索了大量的重复数据。
SQL通常不会生成分层结果集,您必须通过您的应用程序以这种或那种方式生成它们。