2012-03-08 72 views
-1

我有一个查询主要在全文索引字段上运行。进一步改进MySql查询结果订购

查询如下:

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的返回最接近搜索字符串“雷神之锤II”的所有结果偏向上方,然而,这是不是这样......其实,数据库中有两个条目的游戏标题为“quake 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 

我怎么能同时获得“雷神之锤II”项目的预期效果出现在结果的顶部?

+0

可能重复[更好的MySQL/php搜索结果排序](https://stackoverflow.com/questions/9593293/b​​etter-ordering-of-mysql-php-search-results ) – user4157124 2017-10-31 15:38:57

回答

0

你总是可以通过...

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

此添加顺序将刷新相同雷神之锤II(由相同长度太)顶端,和其他所有其他人...