【发布时间】:2019-06-10 09:06:07
【问题描述】:
我在一个数据库中有三个表
表 feedback_responses
resp_id(Primary) | name | mobile | pnr | message | added_on
表 feedback_response_items
feed_item_id | resp_id | qn_id | ans_id
表 feedback_answers
ans_id(Primary) | ans_desc | qn_id
我想要显示 feedback_responses 表 中的所有行,并且每行包含 feedback_response_items 中与表 feedback_responses 的主键匹配的 9 个项目这是 resp_id
所以我会得到所有问题的ans_id,我会得到表feedback_answers
中响应的答案描述查询是
$f=$db->Query("
SELECT fr.resp_id, fr.name, fr.mobile, fr.pnr, fr.message,
(SELECT ans_id FROM feedback_response_items fr1 WHERE fr.resp_id = fr1.resp_id AND fr1.qn_id='1') AS qn1Ans,
(SELECT ans_id FROM feedback_response_items fr2 WHERE fr.resp_id = fr2.resp_id AND fr2.qn_id='2') AS qn2Ans,
(SELECT ans_id FROM feedback_response_items fr3 WHERE fr.resp_id = fr3.resp_id AND fr3.qn_id='3') AS qn3Ans,
(SELECT ans_id FROM feedback_response_items fr4 WHERE fr.resp_id = fr4.resp_id AND fr4.qn_id='4') AS qn4Ans,
(SELECT ans_id FROM feedback_response_items fr5 WHERE fr.resp_id = fr5.resp_id AND fr5.qn_id='5') AS qn5Ans,
(SELECT ans_id FROM feedback_response_items fr6 WHERE fr.resp_id = fr6.resp_id AND fr6.qn_id='6') AS qn6Ans,
(SELECT ans_id FROM feedback_response_items fr7 WHERE fr.resp_id = fr7.resp_id AND fr7.qn_id='7') AS qn7Ans,
(SELECT ans_id FROM feedback_response_items fr8 WHERE fr.resp_id = fr8.resp_id AND fr8.qn_id='8') AS qn8Ans,
(SELECT ans_id FROM feedback_response_items fr10 WHERE fr.resp_id = fr10.resp_id AND fr10.qn_id='10') AS qn10Ans
FROM feedback_responses fr
");
上面的查询需要很多时间(超过 2 分钟)来执行如何优化它,我对此感到震惊,任何反馈都将非常感激。
【问题讨论】:
-
顺便说一句,您可以通过命名列 response_id、answer_id 等来拯救追随您的可怜的管理员。
标签: mysql join query-optimization inner-join