2010-03-06 73 views
1

目前,我使用此查询,这确实是“最相关的”寻找最相关的结果和排序第一的一个不错的工作:如何使用MATCH(),ROUND()和子查询编写MySQL全文查询?

SELECT *, 
     MATCH(text) AGAINST('$keyword') AS score 
    FROM table_name 
    WHERE MATCH(text) AGAINST('$keyword') 
ORDER BY score DESC 
    LIMIT $s, 20 

将会产生类似的结果:

text  | score | date 
--------------------------------------- 
hotdogs  | 13.2345 | Dec 5, 2005 
hamburgers | 13.0765 | July 4, 2008 
pizza  | 8.0987 | Oct 7, 2006 

现在我试图重写查询来将分数四舍五入到整数,然后按日期DESC对它们进行排序。所以,我们的目标是取得成果,如:

text  | score | date 
--------------------------------------- 
hamburgers | 13  | July 4, 2008 
hotdogs  | 13  | Dec 5, 2005 
pizza  | 3  | Oct 7, 2006 

我猜我需要使用ROUND(分数)的一些混合,GROUP BY得分,然后ORDER BY日期DESC - 但我无法弄清楚如何以成功添加。我已经尝试了很多子查询,但是我无法使其工作。有任何想法吗?提前感谢您的任何指针!

回答

1

你的日期必须是DATE类型,否则你不能按日期排序,不可能。

SELECT 
    text, 
    ROUND(MATCH(text) AGAINST('$keyword')) AS score, 
    date 
FROM 
    table_name 
WHERE 
    MATCH(text) AGAINST('$keyword') 
ORDER BY 
    score DESC, 
    date DESC 
LIMIT 20 
OFFSET $s 
+0

完美。这正是我需要的。谢谢! – justin 2010-03-06 18:01:58