Php 需要SQL查询的帮助。使用外部联接或并集合并项目

Php 需要SQL查询的帮助。使用外部联接或并集合并项目,php,mysql,Php,Mysql,如果表1中的用户ID 1已经存在于表2中,并且具有其受尊重的POST ID,则该用户ID 1不应成为返回选择查询的一部分。相反,它将返回表1中的POST_ID 2,3,4,5 当表1中的用户ID 2已存在于表2中,且其受尊重的POST_ID已存在时,预期返回的select查询将是表1中的POST_ID 1、3、4、5以及其他ID 提前谢谢大家!:) 看起来反连接模式可以达到指定的结果 [TABLE 1] +---------+---------+------------------+ | pos

如果表1中的用户ID 1已经存在于表2中,并且具有其受尊重的POST ID,则该用户ID 1不应成为返回选择查询的一部分。相反,它将返回表1中的POST_ID 2,3,4,5

当表1中的用户ID 2已存在于表2中,且其受尊重的POST_ID已存在时,预期返回的select查询将是表1中的POST_ID 1、3、4、5以及其他ID

提前谢谢大家!:)

看起来反连接模式可以达到指定的结果

[TABLE 1]
+---------+---------+------------------+
| post_id | user_id | description      |
+---------+---------+------------------+
|  1      | 1       | Sample post 1    |
|  2      | 1       | Sample post 2    |
|  3      | 2       | Sample post 3    |
|  4      | 2       | Sample post 4    |
|  5      | 3       | Sample post 5    |
+---------+---------+------------------+

[TABLE 2]
+---------+---------+---------+
| id      | user_id | post_id |
+---------+---------+---------+
|  1      | 1       |  1      |
|  2      | 2       |  2      |
+---------+---------+---------+
那个?是用于指定用户标识的占位符字符

这实际上是说返回表1中的所有行以及表2中的匹配行,但是(这里有一个技巧)WHERE子句说排除在表2中找到匹配行的所有行。只保留表1中与表2中不匹配的行

反连接需要花费一点努力才能让你的头脑清醒过来,但一旦你明白了,它将是一个非常宝贵的工具,可以在SQL工具带中随时使用

还有其他查询模式将返回相同的结果,例如
不存在(相关子查询)
或更常见的
不存在(子查询)
。(对于NOT IN,请注意子查询不会返回任何空值。)

编辑


从连接谓词中删除了条件
u.user\u id=t.user\u id
。看起来
[表1]
中的
用户id
是这篇文章的“作者”。并且与用户是否“查看”帖子无关

基于您的示例数据,因为表1中的用户ID 1已经存在于表2中,并且具有受人尊敬的POST_ID,所以它应该返回POST_ID 2,3,4,5

查询:

 SELECT t.post_id
      , t.user_id
      , t.description
   FROM `[Table 1]` t
   LEFT
   JOIN `[Table 2]` u
     ON u.post_id = t.post_id
    AND u.user_id = ?  
  WHERE u.post_id IS NULL
  ORDER BY t.post_id
最终结果:

SELECT t1.* FROM table2 t2
RIGHT OUTER JOIN table1 t1
ON t2.user_id = t1.user_id AND t2.post_id = t1.post_id
WHERE t2.user_id IS NULL

这就是你要找的吗?

我不确定我是否理解这个问题。。。你可以编辑并给出你期望的结果集吗?问题不清楚,你至少应该包含所需的输出,以便我们有一个视觉效果。如果我了解你想要什么,你应该将POST_ID 3、4和5作为结果,而不是2,因为它来自用户_ID 1。哦,对不起,伙计们。用户id 1的预期结果为:表1中的第2,3,4,5行,用户id 2的预期结果为:表1中的第1,3,4,5行编辑查询以从联接条件中删除条件
u.user\u id=t.user\u id
。表
[表1]
中的
用户id
似乎是文章的作者,与用户是否“查看”了文章无关。
post_id     user_id     description
2           1           Sample post 2
3           2           Sample post 3
4           2           Sample post 4
5           3           Sample post 5