需要MySQL选择查询帮助吗

需要MySQL选择查询帮助吗,mysql,Mysql,我目前有一个web应用程序,用户可以在其中共享帖子并与其他用户连接。我将每个帖子存储在一个名为“posts”的表中,并将用户之间的所有关系存储在一个名为“relations”的表中 “员额”的结构是: “关系”的结构是: 现在,我希望有一个类似“新闻提要”的页面,用户可以在其中看到他们的朋友(状态=2)或追随者(状态=1)的所有帖子。但是我在这个问题上遇到了麻烦。我知道如何进行简单的选择查询,但我认为这不可能 因此,我想从“posts”表中选择所有posts,其中“user_id”与“relat

我目前有一个web应用程序,用户可以在其中共享帖子并与其他用户连接。我将每个帖子存储在一个名为“posts”的表中,并将用户之间的所有关系存储在一个名为“relations”的表中

“员额”的结构是:

“关系”的结构是:

现在,我希望有一个类似“新闻提要”的页面,用户可以在其中看到他们的朋友(状态=2)或追随者(状态=1)的所有帖子。但是我在这个问题上遇到了麻烦。我知道如何进行简单的选择查询,但我认为这不可能

因此,我想从“posts”表中选择所有posts,其中“user_id”与“relations”表中的“recipient”相同,其中发送者也等于“17”(我将使用一个变量)。最重要的是,如果“关系”中的那一行的状态是“1”,而“帖子”中的“隐私”是“2”,那么跳过那篇帖子

如何编写此查询?

使用

使用和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);
为了简洁起见,它有助于为表添加别名(例如“posts p”),以便您随后可以专门引用每个表中的字段(例如“p.privacy”)

这将连接表,包括relations.status为1或2的任何位置,但跳过relations.status为1和posts.privacy为2的任何位置

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

Status can either be 1 or 2
SELECT * FROM `posts` 
join `relations` on `recipient` = `user_id` 
WHERE `status` = 2
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);