考虑到您的需求并将其从字面上转换为SQL,我得到以下信息:
SELECt users.id, COUNT(posts.id) as posts_count, COUNT(approved_posts.id) as approved_posts_countFROM usersLEFT JOIN posts ON posts.user_id = users.idLEFT JOIN posts approved_posts ON approved_posts.status = 'approved' AND approved_posts.user_id = users.idWHERe users.status = "active"GROUP BY users.idHAVINg (posts_count = 0 OR approved_posts_count = 0);
对于上面的测试数据,将返回:
4|1|05|0|0
即具有ID
4和的用户
5,其中第一个具有1个帖子,但没有批准的帖子,而第二个没有ID 。
但是,在我看来,这可以简化,因为 任何没有批准帖子的用户也将没有帖子 ,因此不需要合并条件。
在这种情况下,SQL就是:
SELECt users.id, COUNT(approved_posts.id) as approved_posts_countFROM usersLEFT JOIN posts approved_posts ON approved_posts.status = 'approved' AND approved_posts.user_id = users.idWHERe users.status = "active"GROUP BY users.idHAVINg approved_posts_count = 0;
这也将返回相同的两个用户。我想念什么吗?



