0

希望对比我聪明的人提出一个简单的问题 - 从表中选择行时,我的 MySQL 语法有问题。

$query="SELECT auth, first_name, last_name FROM main_user
    WHERE (auth='1' OR auth='2'
      AND CONCAT(first_name,' ',last_name) LIKE '%".$client_name."%')
    LIMIT 10";

我基本上想根据用户输入来检索客户端名称,用户输入的“身份验证”设置为 1 或 2。

我目前的结果似乎正在带回只有“auth”值匹配的结果。

4

5 回答 5

2
auth='1' OR auth='2' AND CONCAT(first_name,' ',last_name) LIKE '%".$client_name."%'

这相当于

(auth='1') 
OR (
       auth='2' 
   AND CONCAT(first_name,' ',last_name) LIKE '%".$client_name."%'
   )

你应该把它写成

(
    auth='1' 
OR  auth='2'
)  
AND CONCAT(first_name,' ',last_name) LIKE '%".$client_name."%'
于 2012-12-02T11:24:40.770 回答
2

尝试将它们OR放在括号中,如下所示:

SELECT 
  auth, 
  first_name, 
  last_name 
FROM main_user
WHERE (auth = '1' OR auth = '2')
  AND CONCAT(first_name,' ',last_name) LIKE '%".$client_name."%')
LIMIT 10;
于 2012-12-02T11:24:48.220 回答
1

()搞错了。尝试

SELECT auth, first_name, last_name
FROM main_user
WHERE (auth = '1' OR auth = '2')
AND CONCAT(first_name,' ',last_name) LIKE '%".$client_name."%'
LIMIT 10

或更简单

SELECT auth, first_name, last_name
FROM main_user
WHERE auth in ('1','2')
AND CONCAT(first_name,' ',last_name) LIKE '%".$client_name."%'
LIMIT 10
于 2012-12-02T11:24:43.313 回答
1

请尝试执行下面提到的 sql 选择查询。

我在下面的 sql 查询中用 IN 替换了 OR 运算符

 $query="SELECT auth, first_name, last_name FROM main_user
WHERE auth in ('1','2')
  AND CONCAT(first_name,' ',last_name) LIKE '%".$client_name."%')
LIMIT 10";
于 2012-12-02T12:05:55.007 回答
0

您需要将两个 OR 子句放在括号中:

WHERE ( ( auth='1' OR auth='2' )
     AND ...
于 2012-12-02T11:24:24.217 回答