0

これを複数回パスした後、このクエリをさらに最適化できるかどうか疑問に思っていますか? どんな洞察も大歓迎です。理想的ではない一連のサブクエリを使用する必要があることに加えて、「タグ」参照をwhere句で使用できないため、そのうちの1つを2回使用する必要があります...(方法を理解できていませんこれに対処するために、これを結合として書き直します)

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 
4

1 に答える 1

2

各行の選択ステートメントを最小限に抑えるようにしてください。その行を結合して、いくつかの識別子でグループ化できます。テーブル構造を投稿して、それらからどのような情報が必要かを教えてください...

于 2012-12-18T21:53:05.197 に答える