首页 > 解决方案 > MySQL 中使用 ASC/DESC 的情况

问题描述

我使用这个查询来获取文章。如果article sponsor status为真,则优先显示在顶部。

SELECT article_id, article_name, article_image, article_url, 
article_feature_status, article_sponsor_status
FROM articles ORDER BY CASE WHEN article_sponsor_status = 'true' THEN 1 ELSE 2 END DESC

我得到了我想要的结果,但我也想从新到旧得到 DESC 的结果。使用此查询从顶部开始进行分析,但我想将其反转。我预期的最后一个“DESC”不起作用。我该怎么做?

提前致谢!

这有效

SELECT article_id, article_name, article_image, article_url, article_feature_status, article_sponsor_status
FROM articles  ORDER BY CASE WHEN article_sponsor_status = 'true' THEN 1 ELSE 2 END ASC, article_id DESC

标签: mysqlsql

解决方案


看来您需要第二个密钥ORDER BY。您的数据没有代表日期的明显列,但类似于:

SELECT . . . 
FROM articles
ORDER BY CASE WHEN article_sponsor_status = 'true' THEN 1 ELSE 2 END ASC,
         <some date field> DESC

在 MySQL 中,您可以将其简化为:

SELECT . . . 
FROM articles
ORDER BY (article_sponsor_status = 'true') DESC,
         <some date field> DESC

在数字上下文中,MySQL 将布尔值视为数字,“1”表示真,“0”表示假。因此,降序排序将匹配项放在不匹配项之前。


推荐阅读