php - 无法否定 mysql 中的条件

标签 php mysql pdo

我有一个用于存储关注其他人的人的表。两列。我可以通过以下方式查询某个用户关注的人(并且拥有某本书)

$stmt = $conn->prepare("
 SELECT USERS.NAME, USERS.NAME2
 FROM USERS
 LEFT JOIN USERS_BOOKS ON USERS_BOOKS.USERID = USERS.ID
 LEFT JOIN FOLLOW ON FOLLOW.FOLLOW_ID = USERS.ID
 WHERE USERS_BOOKS.BOOKID = ? AND FOLLOW.USER_ID = ?
");
$stmt -> execute(array($bookid, $session_userid));

但是,我不知道如何查询那些我不关注的人。我不能简单地将 WHERE 子句修改为 ... AND NOT FOLLOW.USER_ID = ? 因为结果也将包括我已经遵循的那些。下表是一个示例,其中 USER_ID 是关注者,FOLLOW_ID 是被关注者。

ROW USER_ID FOLLOW_ID
1      6      1
2     15      5
3     13      8
4     15      10
5     15      12
6      4      5

第一个查询的结果是第#2,#4,#5行,因为USER_ID No.15跟随这三个用户。但是,当我说 NOT FOLLOW.USER_ID = ? 时,结果将是行号 #1,#3,#6,即用户 1,8,5。但我已经关注了用户 5,那么我该怎么做呢?我只需要两行作为结果:#1 和 #3。

最佳答案

您需要将 NOT EXISTS 与子查询一起使用:

 SELECT USERS.NAME, USERS.NAME2
 FROM USERS
 LEFT JOIN USERS_BOOKS ON USERS_BOOKS.USERID = USERS.ID
 WHERE NOT EXISTS (
   SELECT * FROM FOLLOW
   WHERE FOLLOW.USER_ID = ?
   AND FOLLOW.FOLLOW_ID = USERS.ID
 )
 AND USERS_BOOKS.BOOKID = ?

关于php - 无法否定 mysql 中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29440085/

相关文章:

php - 使用Curl传输SSL编码的字符串

php - 检查 MySQL 的 where 条件中的值是否为空或不存在

mysql - 在 MySQL 中为每月事件添加天数

php - 使用表单动态添加输入文件对象

php - 使用完整或部分在表中搜索

mysql - 优化插入的最佳方法

php - 执行巨大的查询返回 SQLSTATE[HY000] : General error

php - array_sum 未返回 0

php mysql 一表两字段分开搜索结果

php - 在laravel Blade 模板中访问对象内的对象