2014-04-22 58 views
0

的任何順序表:查詢,其中字段包含我想查詢表如下給出的文本字符串

我有一個名爲「類別」欄,我輸入匹配包含N個不同的詞。我希望查詢匹配包含全部N個單詞的所有行,但以任何順序匹配。

例如,如果字段類別包含「你好早安世界」,我的輸入查詢可以包含「你好早上」或「好」或「世界你好」,並且都是與查詢匹配的。

如何制定這樣的SQL表達式?

此外,如果可以使查詢不區分大小寫,這將是很好的。

+0

'MATCH()AGAINST()'? – hjpotter92

回答

2

如果您使用MySQL,則可以使用boolean fulltext search feature來實現此目的。您可以在每個學期前加一個+,然後只返回所有學期的結果(按任何順序)。您需要確保包含類別字段的列具有指定的全文索引才能使其工作。其他數據庫引擎可能有相似的功能。因此,例如,你可以這樣做以下假設有一個全文索引在類別列...

SELECT * FROM myTable WHERE MATCH (category) AGAINST ('+term1 +term2 +term3' IN BOOLEAN MODE); 

如其他人所說,你將不得不擔心我會避免使用「LIKE」操作符混合的大寫/小寫頭痛,以及如果您在LIKE搜索詞的前面使用%的大型數據庫將導致全表掃描,而不是使用可怕的性能指數。

0

我沒有寫循環來爲你建立這個查詢。這將完成工作,但效率相當低。

SELECT * FROM table 
    WHERE (
    TOUPPER(category) LIKE '*HELLO*' AND 
    TOUPPER(category) LIKE '*GOOD*' AND 
    TOUPPER(category) LIKE '*MORNING*' AND 
    TOUPPER(category) LIKE '*WORLD*' 
    ); 

你也可以研究使用SQL的REGEXes。

相關問題