我已经明白我的SQL在至少有一个喜欢的时候会从tbl_posts中恢复所有帖子。 BUt现在我想知道我怎么能让它工作所以它返回所有帖子,即使他们没有喜欢。喜欢的内容通过外键存储在tbl_posts_likes中(post_id,user_id作为tbl_posts_likes中的列)。我的SQL目前看起来像这样:
SELECT tbl_posts.*,tbl_users.name,COUNT(tbl_posts_likes.user_id) AS likes
FROM tbl_posts
INNER JOIN tbl_users ON tbl_posts.user_id = tbl_users.id
LEFT JOIN (SELECT * FROM tbl_friends fr WHERE fr.friend_id = '1') AS fr ON tbl_posts.user_id = fr.user_id
RIGHT JOIN tbl_posts_likes ON tbl_posts_likes.post_id = tbl_posts.id
WHERE tbl_posts.user_id = '1' OR tbl_posts.user_id = fr.user_id
ORDER BY tbl_posts.created_at DESC
如果你可以帮助我,那将是很好的,因为我正在寻找一个有效的SQL设置:/
来自德国的问候!
答案 0 :(得分:2)
您需要按tbl_posts.id进行分组才能获得每篇文章的结果。 如果你不这样做,所有结果都会合并成一行。
每个帖子的结果为fiddle,如果没有,则结果为0。
SELECT tbl_posts.*,tbl_users.name,COUNT(tbl_posts_likes.user_id) AS likes
FROM tbl_posts
INNER JOIN tbl_users ON tbl_posts.user_id = tbl_users.id
LEFT JOIN tbl_posts_likes
ON tbl_posts.id = tbl_posts_likes.post_id
group by tbl_posts.id
找到像这样的问题的解决方案的好方法:
通过首先只获得一些喜欢的帖子来简化问题。稍后添加其他联接,但首先关注获得最基本的结果。