データベースに5つのテーブルがあります。メンバー、アイテム、コメント、投票、国。10個欲しいです。各項目のコメント数と投票数を取得したい。また、各アイテムを提出したメンバーとその出身国も欲しいです。
ここや他の場所に投稿した後、副選択を使用してカウントを取得し始めましたが、このクエリには10秒以上かかります!
SELECT `items_2`.*,
(SELECT COUNT(*)
FROM `comments`
WHERE (comments.Script = items_2.Id)
AND (comments.Active = 1))
AS `Comments`,
(SELECT COUNT(votes.Member)
FROM `votes`
WHERE (votes.Script = items_2.Id)
AND (votes.Active = 1))
AS `votes`,
`countrys`.`Name` AS `Country`
FROM `items` AS `items_2`
INNER JOIN `members` ON items_2.Member=members.Id AND members.Active = 1
INNER JOIN `members` AS `members_2` ON items_2.Member=members.Id
LEFT JOIN `countrys` ON countrys.Id = members.Country
GROUP BY `items_2`.`Id`
ORDER BY `Created` DESC
LIMIT 10
私の質問は、これがこれを行う正しい方法であるかどうか、このステートメントを書くためのより良い方法があるかどうか、またはより良いまったく異なるアプローチがあるかどうかです。副選択を個別に実行して情報を集約する必要がありますか?