进一步改进MySql查询结果排序

时间:2012-03-08 13:15:09

标签: mysql sql-order-by

我的查询主要在全文索引字段上运行。

查询如下:

SELECT
    MATCH (g.GameTitle) AGAINST ('quake ii') as Score,
    g.*, p.id AS platformid,
    p.alias AS PlatformAlias,
    p. name,
    p.icon
FROM
    games as g,
    platforms as p
WHERE
    MATCH (g.GameTitle) AGAINST ('quake ii')
    AND g.Platform = p.id;

我希望mysql将最接近搜索字符串“quake ii”的所有结果返回到顶部,但事实并非如此...事实上,DB中有两个条目,游戏标题为“地震” ii“并且这些在得分排序的任一端分开,即使它们具有相同的分数。

这可以在这里的结果中看到:

Score               id      GameTitle
-----               --      ---------
5.883631706237793   393     Quake II
5.883631706237793   777     Quake
5.883631706237793   778     Quake 4
5.883631706237793   2922    Quake
5.883631706237793   2924    Quake II
5.817491054534912   427     Quake III Arena
5.817491054534912   2925    Quake III Arena
5.689572811126709   85      Enemy Territory: Quake Wars

我怎样才能将“quake ii”条目的预期结果显示在结果的顶部?

2 个答案:

答案 0 :(得分:0)

来自:

http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

  

要索引的单词的最小和最大长度由ft_min_word_len和ft_max_word_len系统变量定义。 ....默认的最小值是四个字符;

因此在搜索中完全忽略了'ii'。

该页面还详细说明了如何更改最低

答案 1 :(得分:0)

你总是可以通过...添加订单。

ORDER BY
   case when  left( g.GameTitle, 8 ) = "Quake II" and length( trim( g.GameTitle )) = 8
      then 1 else 2 end

这会将相同的Quake II(也是相同的长度)冲到顶部,以及其下的所有其他Quake II ......

相关问题