经过多次传递后,我想知道是否有可能进一步优化此查询?任何见解都非常感谢。除了必须使用一堆不理想的子查询之外,我必须使用其中一个两次,因为'标记'引用不能用在where子句中......(一直未能弄清楚如何重写此为连接,以解决)Mysql子查询优化 - 如何减少/删除子查询
SELECT `t1`.*,
(SELECT GROUP_CONCAT(tag_id) FROM media_tag WHERE media_id=t1.id GROUP BY media_id) as tags,
(SELECT GROUP_CONCAT(award_id) FROM media_award WHERE media_id=t1.id GROUP BY media_id) as awards,
(SELECT GROUP_CONCAT(client_id) FROM media_client WHERE media_id=t1.id GROUP BY media_id) as clients,
(SELECT GROUP_CONCAT(collaborator_id) FROM media_collaborator t2 LEFT JOIN collaborator t3 ON t2.collaborator_id=t3.id WHERE media_id=t1.id AND t3.collaborator_type_id='1' GROUP BY media_id) as agencies,
(SELECT GROUP_CONCAT(collaborator_id) FROM media_collaborator t2 LEFT JOIN collaborator t3 ON t2.collaborator_id=t3.id WHERE media_id=t1.id AND t3.collaborator_type_id<>'1' GROUP BY media_id) as collaborators,
`t2`.`idx`, `t2`.`type`
FROM (`media` t1)
LEFT JOIN `sort` t2 ON `t1`.`id`=`t2`.`id` AND t2.type="media"
WHERE
FIND_IN_SET('1',(SELECT GROUP_CONCAT(tag_id) FROM media_tag WHERE media_id=t1.id GROUP BY media_id))
AND IF(t2.tag_id IS NOT NULL,t2.tag_id='1',1)
GROUP BY `t1`.`id`
ORDER BY `t1`.`date_mod` DESC, `title` ASC, `t2`.`idx` ASC, `date_mod` DESC, `title` ASC
我可能会把它扔掉。重新思考正在努力实现的目标。正如你还没有告诉我们,将很难给出明智的答案 –
我有一个'媒体'记录的主要集合。每个子查询都拉入生活在不同表格中的索引属性。属性表具有(id,media_id,name)模式。我们的目标是查询主要媒体文件,能够将属性聚合成逗号分隔的列表,然后abe能够对任何一个属性列表中的给定值进行过滤 – Funkmyer
我很好奇如果有更好的方法来设置这种数据格式的模式? – Funkmyer