【发布时间】:2017-09-24 19:46:40
【问题描述】:
多年来,当我希望我的用户搜索我的数据库中的某个字段时,他可以在其中输入他想要的任何内容,我使用一种算法来分解单词并分别搜索每个单词......一团糟。
例如,如果用户在搜索框中输入“aaa bbb ccc”我不喜欢使用:
SELECT id
FROM table
WHERE description LIKE '%aaa bbb ccc%'
因为有时用户输入的东西乱序,上面的查询会找不到。我通常做的是打破字符串并将其与 PHP 连接,因此结果变为:
SELECT id
FROM table
WHERE description LIKE '%aaa%'
AND description LIKE '%bbb%'
AND description LIKE '%ccc%'
但今天在和朋友交谈后,我想知道是否有一些本地方法可以使用 MY SQL 更快地完成此操作?
【问题讨论】:
-
是的,这叫full text search。
-
@SergioTulentsev "在 WHERE 子句中使用 MATCH() 时,如前面所示的示例,返回的行将自动按照相关性最高的顺序进行排序。太好了!!!!如果您发布答案,我会接受它!我从来没有意识到这一点,它非常神奇!
-
SELECT * FROM table WHERE MATCH (description) AGAINST ('aaa bbb ccc' IN NATURAL LANGUAGE MODE);试试这个,告诉我结果。