2012-09-17 42 views
1

比方說,我有這個表:MySQL和多關鍵字多行搜索

id | field1 | field2 | field3 | field4 
0 | pear | peach | fruit | california 
1 | apple | peas | xxxxxx | cupertino 
2 | apple | peach | xxxxxx | san francisco 

如果「蘋果桃」的用戶搜索我想要得到的線

2 | apple | peach | xxxxxx | san francisco 

相同的結果預計搜索「applepie san francisco」或「applepeach fran」

那麼mysql請求會怎麼做呢?

感謝

回答

1

嘗試此查詢

SELECT * FROM TABLE_NAME WHERE CONCAT(field1, ' ', field2) = 'apple peach'; 
+0

SELECT * FROM TABLE_NAME WHERE CONCAT(field1,'',field2)like'%apple%'and CONCAT(field1,'',field2 )像'%桃';是我想要的 – Mathieu

4
SELECT 
    * 
FROM 
    your_table 
WHERE 
    'apple' IN (field1, field2, field3) 
    AND 'peach' IN (field1, field2, field3) 
+0

這似乎是我想要做的,但我不希望搜索的確切字蘋果,可以applepie例如,是否會做嗎? – Mathieu

+0

@Mathieu所以如果'applepeach'這個詞,你的例子中的所有行將被選中? – xdazz

+0

是的這就是它... – Mathieu

1

足夠簡單,你要檢查是否field1是「蘋果」和field2是「桃花」,所以WHERE field1='apple' AND field2='peach'將做到這一點。

雖然我覺得你想要的更復雜一點。一種解決方案可能是用逗號替換搜索詞中的空格,然後使用SQL運算符在其中進行搜索。因此

類似以下內容可能工作:

SELECT ... FROM ... 
WHERE 
field1 IN ('apple','peach') OR 
field2 IN ('apple','peach') OR 
field3 IN ('apple','peach') OR 
field4 IN ('apple','peach') 
+0

或者,交換'fieldX'和'apple,peach'的順序,類似於xdazz的答案。 – slugonamission

+0

這將選擇所有行。 – xdazz

1

您將使用某種類型的參數,以適應您的搜索。所以:

SELECT `id`, `field1`, `field2`, `field3`, `field4` 
    FROM Table1 
WHERE whatyouarelookingfor_1 IN (field1, field2, field3) 
    AND whatyouarelookingfor_2 IN (field1, field2, field3) 

編輯爲IN子句添加爲它以前只能從一個場

這是一個簡單的查詢選擇,看看這個工作SQL Fiddle code

+1

鑑於用戶搜索「蘋果桃」的問題,我認爲OP需要更廣義的方法。 – slugonamission

+0

在您評論時正在編輯 – Yaroslav

+1

'field1 IN(field1,field2,field3) AND field2 IN(field1,field2,field3)'將始終爲真。 – xdazz