在MySQL中使用ASC / DESC的情况

时间:2018-07-15 15:49:34

标签: mysql sql

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

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

1 个答案:

答案 0 :(得分:0)

似乎您需要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”为假。因此,降序排序会将匹配项放在不匹配项之前。