Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL搜索结果排名_Mysql_Sql - Fatal编程技术网

Mysql SQL搜索结果排名

Mysql SQL搜索结果排名,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_

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

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”或显示结果的结果,并按相关性顺序对它们进行排序。我怎样才能做到这一点


谢谢。

这应该可以做到这一点-您可能需要过滤掉重复的内容,但基本思想是显而易见的

    SELECT  
    `object`.`object_id`,  
    `object`.`name_english`,
    `object`.`name_japanese`,  
    `object`.`name_french`,  
    `object`.`object_info`, 1 as ranking   
    FROM `objects` AS `object`
    WHERE `object`.`name_english` LIKE CONCAT(:search,'%') OR `object`.`name_japanese` LIKE CONCAT(:search,'%') OR `object`.`name_french` LIKE CONCAT(:search,'%')
union 
    SELECT  
    `object`.`object_id`,  
    `object`.`name_english`,
    `object`.`name_japanese`,  
    `object`.`name_french`,  
    `object`.`object_info`, 10 as ranking   
    FROM `objects` AS `object`
    WHERE `object`.`name_english` LIKE CONCAT('%',:search,'%') OR `object`.`name_japanese` LIKE CONCAT('%',:search,'%') OR `object`.`name_french` LIKE CONCAT('%',:search,'%') 
ORDER BY ranking, `object`.`name_english`, `object`.`name_japanese`, `object`.`name_french` ASC

您可以使用MySQL全文索引来实现这一点。这需要MyISAM表类型、索引(name_english、name_japanese、name_french、object_description)或任何要搜索的字段,以及适当使用匹配项。。。完全针对该列集合上的运算符


运行上述查询后,您将获得所有类型的结果,包括您不感兴趣的结果,但是您可以在上面的结果集(由mysql服务器返回)上使用正则表达式来过滤您需要的结果

谢谢,但由于我是新手,请注意我天真的问题。由于我只是比较/搜索对象的名称,一些人告诉我,除非是文本的一段,否则没有必要使用全文,这一点我不确定。将表格转换为MYISAM/全文会影响性能/速度吗?我读过很多文章,但没有一篇能真正解释我的情况。再次感谢您的时间。全文是索引类型。索引是一种加速数据访问(搜索)的数据结构。特定的索引类型FULLTEXT使您能够基于完整(而非部分)单词快速访问所有类型的VARCHAR、CHAR或TEXT字段。这完全符合您的问题陈述。尝试一下,并对其进行基准测试。将表从InnoDB转换为MyISAM会对性能和大小产生影响,特别是在有许多并发写入的情况下。也要以此为基准。您可能希望以1:1的关系将可搜索列设置为单独的表。感谢您的解释。。。由于该表可能每周只更新一次/has write操作,所以我想影响应该是最小的=)我将开始尝试。再次感谢