mysql - SQL搜索结果排名

标签 mysql sql

我有一个表调用对象,其中有列:

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/

相关文章:

mysql - 无法在vb数据源中添加mysql数据库表

c# - 引入 MySQL DATETIME(3) 字段 => .NET DataTable.Load() 现在失败

mysqldump 和 --tab 速度

mysql - SQL SELECT 值为 5 的所有内容但不指定来自哪一列

sql - Oracle中如何使用字符串选择表?

mysql - SQL查询查找连续年份中的工作日

php - sql查询的问题

mysql - 如何在数据库上存储带有订购项目的 list

mysql - 外键引用同一张表中的主键 Mysql

mysql - LEFT OUTER JOIN MySQL 查询返回空结果集