我的数据库中有五个表。成员、项目、评论、投票和国家。我想买 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
我的问题是这是否是正确的方法,是否有更好的方法来编写此语句,或者是否有一种完全不同的方法会更好。我应该单独运行子选择并汇总信息吗?