php - MYSQL查询产生错误

标签 php mysql

我有 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 并为 ilikedislike 请求 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/

相关文章:

mysql - 如何为每一天选择不同的ip

php - 是否可以在 mysql 中将结果列分成两列

php - MySQL UPDATE - 选择性更新

php - 如何用MySQL+Php对数据进行分组?

php - 如果数组值存在于另一个多维数组中,如何检查和替换数组

php - array_key_exist() 以数组为键

php - 选择带有 sport=padel 的所有行

mysql - Webmin - 将子域关联到多个数据库

mysql - 我正在尝试创建一个数据库,但我一直遇到同样的错误,根据我和我的同学的说法,代码很好

php - 在 PHP 环境中的另一个查询中使用一个 MySQL 查询的结果