Mysql搜索匹配和订单

时间:2013-08-20 13:05:32

标签: mysql sql

当我将$file_name_keyword设置为钢铁侠3时,它还会返回我的钢铁侠2结果,反之亦然,它甚至不是问题,但如何让它返回第一个订单所有钢铁侠3条目然后钢铁侠2? 请注意ORDER BY投票 - 投票设置为0,现在所有参赛作品都相同。

SELECT *,MATCH(file_name_keyword) AGAINST('$file_name_keyword')
FROM `uploaded`
WHERE (MATCH(file_name_keyword) AGAINST('$file_name_keyword')
       OR file_name_keyword REGEXP '.*($file_name_keyword).*')
AND active = '1'
ORDER BY `votes`

返回类似

的内容
Iron.Man.2. Multi5.PAL.Nintendo.DS .By.Gamolama.torrent
Iron.Man.3.2013.720p.BluRay.x264.YIFY.mp4
Iron Man 2 Multi5 PAL Nintendo DS By Gamolama torrent
Iron Man 3 2013 720p BluRay x264 YIFY mp4
Iron Man 2 2010 1080p BDRip AAC x264-tomcat12 torrent
iron man 2 wallpaper-1920x1080 jpg

在此先感谢,这就是我最终的结果,并且不知道如何改进它。

表结构[MyISAM]

id - int(11)
file_name - varchar(255) - server generated
file_size - int(11)
file_ext - varchar(255)
file_name_keyword - varchar(255) - user generated e.g. original file name
upload_datetime - datetime
votes - int(11)
active - int(1)

1 个答案:

答案 0 :(得分:0)

首先,需要注意的是mySQL中的全文搜索对字长很敏感。标识符即ft_min_word_len,搜索索引将忽略低于此长度的任何字长,因此不会出现在结果中。 Fine Tuning将帮助您解决此最小值问题。

对于您的查询,您可以在下面尝试订购

SELECT *,MATCH(file_name_keyword) AGAINST('$file_name_keyword') as relevancy
FROM `uploaded`
WHERE MATCH(file_name_keyword) AGAINST('$file_name_keyword')
AND active = '1'
ORDER BY relevancy DESC, `votes` DESC

<强> TIPS 有关FullTEXT here ..

的更多详细信息