MySQL对ORDER进行例外处理?

时间:2017-08-27 15:31:58

标签: mysql

我有一个像下面这个查询的查询。

SELECT name, id, note_date, note
FROM example
ORDER BY name, note_date

假设我有一个名为" John Smith"的用户。我希望查询按原样工作,除了我希望John Smith的所有条目都违反订单并显示在列表的顶部。

我只是想知道除了JOIN之外是否还有更简单或更正确的方法(如下所示)。

此外,如果重要的话,约翰史密斯"在任何特定时间可能有也可能没有参赛作品。

谢谢!

像:

SELECT name, id, note_date, note
FROM example
WHERE name = "John Smith" 
ORDER BY note_date
JOIN
SELECT name, id, note_date, note
FROM example
WHERE name != "John Smith"
ORDER BY name, note_date

3 个答案:

答案 0 :(得分:2)

 SELECT name, 
             id, 
             note_date,
             note, 
             CASE 
               WHEN name= 'John Smith' 
                  THEN 0 
                ELSE 1 
               END AS OrderStatement
 FROM example
 ORDER BY OrderStatement, name, note_date

您只需创建一个列来生成自定义顺序,并将其与ORDER BY子句一起用于其他列。

答案 1 :(得分:0)

您可以使用

  

然后

的情况

这样的我们

select id, etc, etc
    case users.name
        when ‘John Smith’ then ORDER BY etc
        when 'X' then ORDER BY etc
    end
from`users`

注意vorgoles,这些不对,但我在手机上并且没有正确的那些

答案 2 :(得分:0)

一种方法是使用UNION:

(SELECT name, id, note_date, note
FROM example
WHERE name = "John Smith" 
ORDER BY note_date)
UNION
(SELECT name, id, note_date, note
FROM example
WHERE name != "John Smith"
ORDER BY name, note_date)

另一种更简洁的方法是使用CASE运算符:

SELECT name, id, note_date, note, CASE WHEN name='John Smith' THEN 1 ELSE 2 END as rank
FROM example
ORDER BY rank, name, note_date