2014-01-13 151 views
0

我目前有一个web应用程序,用户可以在其中共享帖子并与其他用户连接。我每个岗位存储在一个名为“上岗”表和所有表中的所谓的“关系”需要MySQL选择查询帮助

的“上岗”的结构,用户之间的关系是:

+-------------+-----------+---------+------------+----------------+ 
| post_id  | user_id | text | date  | privacy  | 
+-------------+-----------+---------+------------+----------------+ 
| 1   | 4   | Hello | 1/13/2014 | 2    |  
+-------------+-----------+---------+------------+----------------+ 

Privacy can either be 1 or 2 

“关系”的结构是:

+-------------+-----------+------------+------------+ 
|rel_id  | sender | recipient | status  | 
+-------------+-----------+------------+------------+ 
| 1   | 17  | 4   | 1   |  
+-------------+-----------+------------+------------+ 

Status can either be 1 or 2 

现在,我希望有一个“新闻频道”一样的页面,用户可以看到所有的职位从他们要么朋友(状态= 2)或以下的(状态的人= 1 )。但是我在查询时遇到了问题。我知道如何做简单的选择查询,但我认为这是不可能的。

所以,我想从“posts”表中选择“user_id”与“关系”表中的“收件人”相同的所有帖子,其中发件人等于'17'(我是要使用一个变量)。现在最重要的是,如果来自“关系”的行的状态为“1”,“帖子”行的“隐私”为“2”,则跳过该帖子。

我该如何写这个查询?

回答

1

使用joins

SELECT * FROM `posts` 
join `relations` on `recipient` = `user_id` 
WHERE `status` = 2 
0

使用joins和WHERE子句,如下所示:

SELECT * 
    FROM posts p 
    JOIN relations r ON p.user_id = r.recipient 
WHERE (r.status = 1 OR r.status = 2) 
    AND (r.status != 1 OR p.privacy != 2); 

为了简洁,它有助于别名表(例如 “上岗P”),这样您可以在随后请特别指明每个字段的字段(例如“p.privacy”)。

这将加入表格,包括任何关系。状态为1或2的位置,但不会跳过关联状态为1且posts.privacy为2的任何位置。