-2

所以我现在正在编写一个类似新闻提要的推特,但问题是我自己的帖子在帖子之前显示了 4 次(我认为后面有 4 个条目我认为这就是为什么它显示我的帖子 4 次)

SELECT * 
FROM following AS f, posts AS p 
WHERE p.post_user_id = 1 OR 
      (f.follower_id = p.post_user_id AND f.user_id = 1) 
ORDER BY  `p`.`post_time` DESC 

所以这是我目前的代码。虽然我认为这是错误的,因为它会显示我的帖子 4 次。我怎样才能解决这个问题?

4

2 回答 2

2

由于您正在使用OR您的JOIN标准,我相信您会收到Cartesian Productwhen post_user_id = 1。尝试这样的事情:

SELECT * 
FROM following AS f
    JOIN posts AS p ON f.follower_id = p.post_user_id
WHERE p.post_user_id = 1 OR f.user_id = 1 
ORDER BY  p.post_time DESC 
于 2013-07-13T16:16:39.723 回答
1

既然看起来你真的不关心其中的字段following而只想要帖子,那么使用LEFT JOIN?;怎么样?

SELECT p.* 
FROM posts p
LEFT JOIN following f ON f.follower_id=1 AND p.post_user_id = f.user_id
WHERE post_user_id=1 OR f.user_id IS NOT NULL
ORDER BY  `p`.`post_time` DESC 

一个用于测试的 SQLfiddle

于 2013-07-13T16:44:07.917 回答