我在mysql
面临问题,以生成website
中可以使用的良好查询。我正在做的是,如果用户登录网站并尝试使用first_name
,last_name
或username
等关键字搜索已注册的用户,那么我想将结果返回给我,排除正在搜索的用户记录。这是具有数据的users
表。
+----+-----------------+----------+------------+-----------+
| id | email | username | first_name | last_name |
+----+-----------------+----------+------------+-----------+
| 1 | jim@example.com | jim | Jim | John |
+----+-----------------+----------+------------+-----------+
| 2 | doe@example.com | doe | Doe | John |
+----+-----------------+----------+------------+-----------+
| 3 | tim@a.com | tim | Tim | John |
+----+-----------------+----------+------------+-----------+
假设有id
1
的用户正在搜索,并使用john
之类的关键字搜索我用于排除该用户记录的查询
SELECT *
FROM
`users`
WHERE
`id` <> 1 AND CONCAT(`first_name`, ' ', `last_name`) LIKE "%john%" OR `username` LIKE "%john%"
然后mysql
给出这样的结果。
+----+-----------------+----------+------------+-----------+
| id | email | username | first_name | last_name |
+----+-----------------+----------+------------+-----------+
| 2 | doe@example.com | doe | Doe | John |
+----+-----------------+----------+------------+-----------+
| 3 | tim@a.com | tim | Tim | John |
+----+-----------------+----------+------------+-----------+
但是当我使用id
1
的用户名进行搜索时,为什么mysql
不会排除记录
SELECT *
FROM
`users`
WHERE
`id` <> 1 AND CONCAT(`first_name`, ' ', `last_name`) LIKE "%jim%" OR `username` LIKE "%jim%"
输出结果:
+----+-----------------+----------+------------+-----------+
| id | email | username | first_name | last_name |
+----+-----------------+----------+------------+-----------+
| 1 | jim@example.com | jim | Jim | John |
+----+-----------------+----------+------------+-----------+
答案 0 :(得分:0)
它只是你和/或中的括号问题:
`id` <> 1 AND ( CONCAT(`first_name`, ' ', `last_name`) LIKE "%jim%"
OR `username` LIKE "%jim%" )