的任何順序表:查詢,其中字段包含我想查詢表如下給出的文本字符串
我有一個名爲「類別」欄,我輸入匹配包含N個不同的詞。我希望查詢匹配包含全部N個單詞的所有行,但以任何順序匹配。
例如,如果字段類別包含「你好早安世界」,我的輸入查詢可以包含「你好早上」或「好」或「世界你好」,並且都是與查詢匹配的。
如何制定這樣的SQL表達式?
此外,如果可以使查詢不區分大小寫,這將是很好的。
的任何順序表:查詢,其中字段包含我想查詢表如下給出的文本字符串
我有一個名爲「類別」欄,我輸入匹配包含N個不同的詞。我希望查詢匹配包含全部N個單詞的所有行,但以任何順序匹配。
例如,如果字段類別包含「你好早安世界」,我的輸入查詢可以包含「你好早上」或「好」或「世界你好」,並且都是與查詢匹配的。
如何制定這樣的SQL表達式?
此外,如果可以使查詢不區分大小寫,這將是很好的。
如果您使用MySQL,則可以使用boolean fulltext search feature來實現此目的。您可以在每個學期前加一個+,然後只返回所有學期的結果(按任何順序)。您需要確保包含類別字段的列具有指定的全文索引才能使其工作。其他數據庫引擎可能有相似的功能。因此,例如,你可以這樣做以下假設有一個全文索引在類別列...
SELECT * FROM myTable WHERE MATCH (category) AGAINST ('+term1 +term2 +term3' IN BOOLEAN MODE);
如其他人所說,你將不得不擔心我會避免使用「LIKE」操作符混合的大寫/小寫頭痛,以及如果您在LIKE搜索詞的前面使用%的大型數據庫將導致全表掃描,而不是使用可怕的性能指數。
我沒有寫循環來爲你建立這個查詢。這將完成工作,但效率相當低。
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。
'MATCH()AGAINST()'? – hjpotter92