0

在我上一个问题之后,我有一个 SQL 查询,如下所示:

SELECT * 
WHERE ... 
ORDER BY 
  CASE user_id WHEN 34 THEN 1 ELSE 2 END, 
  CASE status WHEN 'active' THEN 1 ELSE 2 END

正如您在上面的代码中看到的,有两个 CASE ... WHEN语句。在这种情况下会发生什么?也就是说,记录将如何排序?那些“加倍”的陈述可能会发生冲突吗?


更新:我想让它按以下顺序返回记录:(1)记录在哪里user_id = 34status = 'active';(2) 记录在哪里status = 'active'(无条件user_id);(3) 所有其他记录。我怎样才能做到这一点?

4

2 回答 2

3

首先将出现 user_id =34 且状态为 "active" 的所有记录,然后是 user_id=34 且状态不是 "active" 的记录,然后是 user_id 不等于 34 且状态等于 "active" 的记录,最后是所有剩余状态不是的记录“积极的”

于 2012-12-10T16:17:58.730 回答
1

Order by 是按照您编写它们的顺序完成的。

您的记录将被排序:

[first]
user_id = 34, status = 'active'
user_id = 34, status <> 'active'
user_id <> 34, status = 'active'
user_id <> 34, status <> 'active'
[last]

于 2012-12-10T16:23:33.197 回答