2016-09-30 71 views
1

我花了几个小时,仍然无法正确地做到这一点。我有用户表和帖子表。从用户选择帖子

用户表

username | followers  | following 

john  | mary,steven,joel | anthony,matthew 

帖子表

fromuser | post     | date 

mary  | Bla bla, today is cold. | 1475982647 

我需要得到谁被跟随用户的帖子。试过这个;

SELECT * FROM posts WHERE $member[nick] 
IN (SELECT followers FROM users WHERE $member[nick] IN followers ORDER BY id DESC limit 10 

这不会返回任何帖子。什么是正确的方法来做到这一点?

+3

不要用逗号分隔数据 –

+0

@FastSnail,它只是为追随者和后续行,因为逗号是不允许的,我用过一次。有什么问题吗? –

+2

@canertaşdemir是[在数据库列中存储分隔列表真的不好吗?](http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-真的那么糟糕) –

回答

1
SELECT * 
FROM posts 
WHERE FIND_IN_SET(fromuser, 
        (SELECT following FROM users WHERE username = 'john')) > 0 

此查询使用FIND_IN_SET检查出现在posts他是否正在遵循由给定用户(约翰在这种情况下)每个用户。

+0

@canertaşdemir我更新了逻辑,它将考虑空字符串或NULL作为没有关注该用户的追随者。 –

+0

在您的查询中,我应该在哪里包含当前用户? $ member [nick] –

+0

@canertaşdemir只需在'WHERE'子句中添加一个额外的检查。 –