无法否定mysql中的条件

时间:2015-04-03 21:43:51

标签: 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。

1 个答案:

答案 0 :(得分:0)

您需要使用带有子查询的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 = ?