我有一个表调用对象,其中有列:
object_id,
name_english(vchar),
name_japanese(vchar),
name_french(vchar),
object_description
对于每个对象。
当用户执行搜索时,他们可能会输入英语、日语或法语...而我的 sql 语句是:
SELECT
o.object_id,
o.name_english,
o.name_japanese,
o.name_french,
o.object_description
FROM
objects AS o
WHERE
o.name_english LIKE CONCAT('%',:search,'%') OR
o.name_japanese LIKE CONCAT('%',:search,'%') OR
o.name_french LIKE CONCAT('%',:search,'%')
ORDER BY
o.name_english, o.name_japanese, o.name_french ASC
有些条目是这样的:
Tin spoon,
Tin Foil,
Doctor Martin Shoes,
Martini glass,
Cutting board,
Ting Soda.
因此,当用户搜索单词“Tin”时,它将返回所有这些结果,但我只想返回特定包含术语“Tin”的结果或显示结果并按相关顺序对它们进行排名。我怎样才能做到这一点?
谢谢。
最佳答案
您可以使用 MySQL FULLTEXT 索引来做到这一点。这需要 MyISAM 表类型、(name_english、name_japanese、name_french、object_description) 或您要搜索的任何字段的索引,以及恰好在该组列上适当使用 MATCH ... AGAINST 运算符。
请参阅 http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html 处的手册,以及下页中的示例 http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html
关于mysql - SQL搜索结果排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5458758/