Answers:
默认排序是递增的,您需要在两个订单中都添加关键字DESC:
ORDER BY article_rating DESC, article_time DESC
ORDER BY article_rating, article_time DESC
仅当有两个具有相同评分的文章时,才会按article_time排序。从我在您的示例中看到的所有内容,这就是发生的情况。
↓ primary sort secondary sort ↓
1. 50 | This article rocks | Feb 4, 2009 3.
2. 35 | This article is pretty good | Feb 1, 2009 2.
3. 5 | This Article isn't so hot | Jan 25, 2009 1.
但请考虑:
↓ primary sort secondary sort ↓
1. 50 | This article rocks | Feb 2, 2009 3.
1. 50 | This article rocks, too | Feb 4, 2009 4.
2. 35 | This article is pretty good | Feb 1, 2009 2.
3. 5 | This Article isn't so hot | Jan 25, 2009 1.
这可能会帮助正在寻找按两列对表进行排序的方式的人,但是以并行方式。这意味着使用聚合排序功能将两种排序组合在一起。例如,在使用全文搜索检索文章以及与文章发布日期有关时,此功能非常有用。
这只是示例,但是如果您了解了这个主意,则可以找到很多要使用的聚合函数。您甚至可以加权列以使其优先于一秒。我的功能在两种类型中都具有极限,因此,最有价值的行位于顶部。
抱歉,如果有更简单的解决方案可以完成此工作,但是我还没有找到任何解决方案。
SELECT
`id`,
`text`,
`date`
FROM
(
SELECT
k.`id`,
k.`text`,
k.`date`,
k.`match_order_id`,
@row := @row + 1 as `date_order_id`
FROM
(
SELECT
t.`id`,
t.`text`,
t.`date`,
@row := @row + 1 as `match_order_id`
FROM
(
SELECT
`art_id` AS `id`,
`text` AS `text`,
`date` AS `date`,
MATCH (`text`) AGAINST (:string) AS `match`
FROM int_art_fulltext
WHERE MATCH (`text`) AGAINST (:string IN BOOLEAN MODE)
LIMIT 0,101
) t,
(
SELECT @row := 0
) r
ORDER BY `match` DESC
) k,
(
SELECT @row := 0
) l
ORDER BY k.`date` DESC
) s
ORDER BY (1/`match_order_id`+1/`date_order_id`) DESC
下面将根据两列的降序对数据进行排序。
ORDER BY article_rating DESC, article_time DESC