这次我遇到的项目中有这样一个数据库设计,下图是日记表和收藏表。
然后需要利用日记表对收藏表中对应的收藏进行count。
第一次写出来的sql如下:
SELECT
food_diary.*,
( SELECT count( collect.diary_id ) FROM collect WHERE food_diary.id = collect.diary_id ) AS countNum
FROM
food_diary
这样就能获取对应的数据了。但是我们看一下对应的sql查询性能分析。
EXPLAIN SELECT
food_diary.*,
( SELECT count( collect.diary_id ) FROM collect WHERE food_diary.id = collect.diary_id ) AS countNum
FROM
food_diary
然后是第二种方法:
SELECT
food_diary.*,
count( collect.diary_id )
FROM
food_diary
LEFT JOIN collect ON food_diary.id = collect.diary_id
GROUP BY
food_diary.id;
这样同样能获取对应的数据,只是需要注意mysql对count函数使用的要求。我们查看一下对应的效率。
这样我会发现对应的一些一些效率上的增加。