无法否定 mysql 中的条件
Unable to negate condition in mysql
我有 table 用于存储关注其他人的人。两列。我可以通过
查询某个用户关注(并拥有某本书)的人
$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 = ?
因为结果将包括那些我已经遵循的结果。以下table为例,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第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 = ?
我有 table 用于存储关注其他人的人。两列。我可以通过
查询某个用户关注(并拥有某本书)的人$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 = ? 因为结果将包括那些我已经遵循的结果。以下table为例,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第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 = ?