2013-03-21 56 views
0

我想編寫mysql查詢來顯示所有記錄,如果文本字段的值=「全部」或顯示與關鍵字值相似的記錄。我寫了下面的代碼來給出一個想法。在mysql中使用多個關鍵字Like

if (keyword = 'All') 
    select * from ItemMain 
else if (keyword like %itemname%) 
    select * from ItemMain 
+0

難道你只是或兩個條款? – ethrbunny 2013-03-21 17:01:27

+0

我不知道如何使用MySQL內部查詢。 – amal 2013-03-21 17:05:03

+0

由於你的兩個'then'子句是相同的,所以你不需要else。 – ethrbunny 2013-03-21 17:06:53

回答

0

如果itemname是您的列名稱,並且您的搜索字符串參數將替換代碼中的?。那麼你的說法應該是這個樣子,如果你正在尋找包含您的搜索字符串的所有itemNames的:

SELECT * 
FROM  ItemMain 
WHERE ? = 'All' OR itemname LIKE '%?%' 

或者這個,如果你正在尋找一個精確匹配:

SELECT * 
FROM  ItemMain 
WHERE ? = 'All' OR itemname = ? 
+0

到目前爲止,它僅適用於關鍵字All。我的sql查詢有語法錯誤。我在java上使用preparedStatement。這裏 ?獲取textfiled值。 String sql =「SELECT * FROM ItemMain WHERE?='All'或?like%itemName%」; %itemName%是表列。 – amal 2013-03-21 19:05:51

+0

我更新了我的代碼。 – Tom 2013-03-21 20:04:01

0

好吧,假設PHP作爲前端的語言,你可以把它們都放在一個這樣的查詢(原諒花括號;我永遠知道什麼時候會需要他們或不那麼我傾向於過度使用它們):

$query = <<< ENDSQL 
SELECT * 
    FROM ItemMain 
    WHERE ('{$keyword}' = 'All') OR (your_textfield like '%{$keyword}%') 
ENDSQL; 
... execute the query 

但真的我會去從@cjg的建議,並使用兩種不同的查詢:

$query = ""; 
if ($keyword == 'All') { 
    $query = "SELECT * FROM ItemMain"; 
} else { 
    $query = "SELECT * FROM ItemMain WHERE your_textfield LIKE '%{$keyword}%'"; 
} 
... execute the query