MySQL使用LIKE和AND得不到正确的结果

时间:2012-12-02 11:21:13

标签: php mysql mysqli

希望对比我更好脑的人来说这是一个简单的问题 - 从表中选择行时我的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";

我基本上想要根据'auth'设置为1或2的用户输入来检索客户端名称。

我目前的结果似乎是在只有'auth'值匹配的情况下返回结果。

5 个答案:

答案 0 :(得分: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."%'

答案 1 :(得分: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;

答案 2 :(得分: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

答案 3 :(得分:1)

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

我在下面的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";

答案 4 :(得分:0)

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

WHERE ( ( auth='1' OR auth='2' )
     AND ...