我正在处理现有项目并找到此SQL语句。在查看MySQL documentation之后,我仍然对语法以及MySQL如何解释它感到困惑。
我有一个名为status
的列,可以是0(非活动),1(活动),2(已完成),3(测试)。
ORDER BY CASE status WHEN 1 THEN 1 ELSE -1 END DESC, id ASC
让我感到困惑的是THEN 1 ELSE -1
。在documentation中,它提到您在statement_list
之后放置THEN
。我希望看到这样的事情:
ORDER BY CASE status WHEN 1 THEN status ELSE -1 (or some other value that will be ignored) END DESC, id ASC
mysql如何解释THEN 1 ELSE -1
?我想我很好奇这句话如何回归正确的结果。它基本上是这样做的:如果status = 1,则ORDER BY status DESC
忽略order by语句。
答案 0 :(得分:1)
ORDER BY CASE状态当1那么1 ELSE -1 END DESC,id ASC
这意味着它有效地按(1或-1 DESC,id ASC)排序。
根据状态值,它将1或-1作为第一个表达式来排序依次和" id ASC"是打破平局。 status = 1
的行将在结果中排在第一位(按id
按升序排序),之后将返回status
的其他值的行(不再指定其顺序)
答案 1 :(得分:0)
由于DESC
子句,它将按活动状态优先(1)排序,然后在此之后返回其他所有内容。分配给-1的任何东西都可以随机排序。