2017-09-24 27 views
1

這樣的好的sql搜索多年來,當我希望我的用戶在我的數據庫中搜索某些字段時,他可以輸入他想要的任何內容,我使用一種算法來打破單詞並單獨搜索每個單詞... a一塌糊塗。如何使用像

例如,如果在搜索框中輸入「AAA BBB CCC」的用戶類型我不喜歡使用:

SELECT id 
    FROM table 
WHERE description LIKE '%aaa bbb ccc%' 

因爲有時用戶類型的東西出來的秩序及以上wouldng找到查詢。我最常做的是打破字符串,所以結果就變成用PHP相連來:

​​3210

不過跟一個朋友,我想知道是否有更快做到這一點使用MY SQL一些本地方式後的今天?

+2

是的,這就是所謂的[全文搜索(https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html)。 –

+0

@SergioTulentsev「當在WHERE子句中使用MATCH()時(如前面所示的示例),返回的行將自動按照最高相關性排序。」這真是太棒了!!!!!如果您發佈答案,我會接受它!我從未意識到這一點,這非常神奇! – Samul

+0

SELECT * FROM表 WHAT MATCH(description) AGAINST('aaa bbb ccc'IN NATURAL LANGUAGE MODE);試試這個並告訴我結果。 –

回答

2

你想要做什麼叫full text search,現在大多數關係數據庫都支持它,包括mysql。

+0

你知道有什麼好的參考嗎? Mysql頁面非常混亂,我找到的其他頁面提供了相反的例子......大多數人都說全文搜索總是返回結果,即使用戶輸入的單詞中只有一個單詞。 – Samul

+1

mysql文檔是_的參考。 :) –

+0

我讀了很多,但我仍然無法找到我的問題的答案...因爲使用你的建議答案有時它會返回resulsts而不是所有的單詞。例如,搜索「aaa bbb ccc」的用戶仍會返回僅包含「aaa bbb」的結果!我正在使用這個 - > SELECT * FROM'itens_cadastrados'在哪裏匹配(titulo)反對(「aaa bbb ccc」) – Samul

0

我想你可以使用REGEXP。例如:

Select * from table where description REGEXP 'aaa|bbb|ccc' 
+0

好;)但我不認爲這是優化工作在一個巨大的數據庫,因爲我正在使用一個(20列+ 18行) – Samul

0

FULLTEXT搜索速度非常快。 INSTR或定位工作比REGEXP更好。但這取決於各種因素。 更多比較here

SELECT * from table where INSTR(description, 'aaa') >0 
SELECT * from table where LOCATE(description, 'aaa') >0