2014-07-09 148 views
0

我有一個MySQL用戶表,其中包含多個字段,包括整型用戶類型字段(admin或normal)。我期待有一個主搜索可以在所有領域,但與搜索給出的字符串,其中用戶類型的條款(特定類型)MySQL:搜索特定類型字段中的所有字段

我使用

$sql = "SELECT * FROM users WHERE user_fname like '%".$data."%' OR user_lname like '%".$data."%' OR user_login like '%".$data."%' OR user_callsign like '%".$data."%' AND user_type='2'"; 

但是當我搜索,它查詢整個表忽略我的user_type子句。我已經沒有想法了,請告訴我我該如何過來。

感謝,

+0

由於user_type字段的類型是整型,請刪除單引號。 –

回答

3

你需要整理OR條件像(all ORs),然後這樣就不會忽視user_type='2'及部分

$sql = "SELECT * FROM users 
WHERE (user_fname like '%".$data."%' 
OR user_lname like '%".$data."%' 
OR user_login like '%".$data."%' 
OR user_callsign like '%".$data."%') 
AND user_type='2'"; 
+1

完美!它是如此簡單。非常感謝,你節省了我的時間 –

0

您需要圓括號申請AND過濾器。對於或操作的順序和與相等,這意味着它會從左向右走

您的查詢應該看起來更像是這樣的:

SELECT  * 
FROM users 
WHERE (user_fname like '%".$data."%' 
OR  user_lname like '%".$data."%' 
OR  user_login like '%".$data."%' 
OR  user_callsign like '%".$data."%') 
AND  user_type='2' 

你也應該消毒您的輸入和/或方法,用查詢。否則,你會留下大量的SQL注入攻擊。

使用PDO或MySQLi(如果您必須的話)進行研究。

0
$sql = "SELECT * FROM users WHERE (user_fname like '%".$data."%' OR user_lname like '%".$data."%' OR user_login like '%".$data."%' OR user_callsign like '%".$data."%') AND user_type='2'"; 
+0

你可以給你的答案增加一點解釋嗎?幫助提問者有很長的路要走! – msturdy