2012-12-02 68 views
0

希望有一個簡單的問題給那些腦筋比我更好的人 - 從表中選擇行時,我遇到了MySQL語法問題。使用LIKE和AND得不到正確結果的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 '值是匹配的。

回答

0

你需要把兩個或兩個子句中的括號:

WHERE ((auth='1' OR auth='2') 
    AND ... 
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

你得到了()錯誤。嘗試

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 
+0

作品,但沒有解釋爲什麼它之前 –

+0

@MichelFeldheim很難說清楚沒有你(〔實施例)數據沒有工作。 '(A或B和C)' 指 '(A或(B和C)' 你需要 '((A或B)和C)' – Perleone

+0

不是我的,只是從旁邊走過,評論:) –

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; 
1

請嘗試執行下文提到的SQL SELECT查詢。

我已經更換或運營商,在下面的SQL查詢

$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";