如何选择仅与用户相关的“帖子”?

时间:2014-02-02 23:34:40

标签: php mysql sql mysqli

编辑:我通过从每个答案中提取想法来回答我自己的问题。感谢大家的帮助c:

解决方案:

SELECT *
FROM status
WHERE author IN
    (SELECT user1
     FROM friends
     WHERE user2='$username'
       AND accepted='1')
  OR author IN
    (SELECT user2
     FROM friends
     WHERE user1='$username'
       AND accepted='1')
UNION
SELECT *
FROM status
WHERE author = '$username'

我正在建立一个网站,尽管我对SQL非常陌生。我有一个状态系统和一个朋友系统。我想要做的是创建一个新闻源,所以只有用户和他们的朋友发布的帖子才会出现。

我有三个表:用户,朋友和状态(帖子)。

所以,我想要做这样的事情(是的,我试过写它)

Select * from status where author = $username or author = any friends of $username

2 个答案:

答案 0 :(得分:2)

尝试(我不知道你的表结构):

SELECT s.* 
FROM  status AS s
LEFT JOIN users AS u
 (ON u.user_id = status.user_id)
LEFT JOIN  friends AS f
 (f.user_id = u.user_id)
WHERE u.username = $username   # or u.user_id = $user_id

答案 1 :(得分:1)

如果您的朋友表是(用户,朋友),它看起来像

where author in (select user from user_friend where friend = $username)

或类似的东西。它也可以使用连接,并且连接通常比嵌套查询/嵌套选择更有效。

顺便说一下,你现在容易受到SQL注入攻击,你应该修复。