我有 3 张 table :
MEMBERS:
+------------+---------+--------+
| user | pass | sex |
+------------+---------+--------+
| testuser3 | qwerty | male |
| testuser4 | qwerty | female |
| testuser5 | qwerty | male |
+------------+---------+--------+
LIKEPROFILE:
+------------+---------------+
| user | ilike |
+------------+---------------+
| testuser3 | testuser4 |
+------------+---------------+
DISLIKEPROFILE:
+------------+---------------+
| user | dislike |
+------------+---------------+
| testuser4 | testuser3 |
+------------+---------------+
在我的网站中,假设 testuser3 当前已登录,即 $user = testuser3
我想创建一个 MYSQL 查询,其中包含除 $user 之外的所有成员: 1) $user 尚未“喜欢”(例如:在 likeprofile 表中,testuser3 已“喜欢”testuser4)和 2)$user 尚未“不喜欢”谁(例如:在 dislikeprofile 表中,testuser4 已“不喜欢”testuser3) 。这就是我所拥有的,但它产生了以下错误:“操作数应包含 1 列”。请帮忙!
$result = queryMysql("SELECT `user` FROM `members`
WHERE `user` NOT IN(SELECT * FROM `likeprofile` WHERE user='$user')
AND `user` NOT IN(SELECT * FROM `dislikeprofile` WHERE user='$user')
AND `user` <> '$user'")
最佳答案
首先,如果您还没有这样做,您应该确保在将密码存储到数据库之前对密码进行哈希处理。如果您使用 PHP 5.5 或更高版本,则可以使用 password_hash()
来执行此操作功能。
关于您的查询,最直接的问题是您的子查询在其选择中返回多于一列; SELECT * 将返回该行的所有列,但 NOT IN 期望它们仅返回单个列。
$result = queryMysql(
"SELECT `user`
FROM `members`
WHERE `user` NOT IN (
SELECT `ilike`
FROM `likeprofile`
WHERE user='$user'
)
AND `user` NOT IN (
SELECT `dislike`
FROM `dislikeprofile`
WHERE user='$user'
)
AND `user` <> '$user'"
);
但是,子查询效率较低,因此您最好使用 LEFT JOINS 并为 ilike
和 dislike
请求 NULL 结果,如下所示:
$result = queryMysql(
"SELECT `user`
FROM `members` AS `m`
LEFT JOIN `likeprofile` AS `lp`
ON `m`.`user` = `lp`.`user`
LEFT JOIN `dislikeprofile` AS `dp`
ON `m`.`user` = `dp`.`user`
WHERE `lp`.`ilike` IS NULL
AND `dp`.`dislike` IS NULL
AND `user` != '$user'"
);
关于php - MYSQL查询产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315682/