我有一个表“Events”和几个联合表,如下所示:
事件 + 标签 + 图片 + 视频
我希望能够形成一个查询,在其中我可以计算联合表中的项目(如果有的话)。所以我有类似的东西:
SELECT t.*, COUNT(distinct t1.id) visible_tags, COUNT(distinct t2.id)
invisible_tags, ..., COUNT(distince tn.id) approved_videos
FROM events t
LEFT JOIN tags t1 ON ...
LEFT JOIN tags t2 ON ...
LEFT JOIN tags t3 ON ...
...
LEFT JOIN videos tn ON ...
问题在于,即使使用所有索引进行查询也需要相当长的时间。有没有办法以不同的方式形成它?
谢谢。
最佳答案
除了 @sanmai 所说的“解释选择”之外,您还可以加入子查询。
SELECT t.*, t1_count, t2_count
FROM events t
LEFT JOIN (select count(distinct id) as t1_count from tags) as t1
LEFT JOIN (select count(distinct id) as t2_count from tags) as t2
...
关于MySQL:计算许多连接表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333083/