按多个条件排序多个条件

时间:2018-03-19 15:22:03

标签: mysql sql

我有一个包含这样的事件的表

id----------title-----------date-------------status
1-----------birthday-------2018-03-12--------1
2-----------match----------2018-03-13--------2
3-----------anniversary----2018-03-10--------1
4-----------trip-----------2018-03-15--------1
5-----------birthday-------2018-03-17--------2
6-----------birthday-------2018-03-11--------1

预期结果

id----------title-----------date-------------status
1-----------birthday-------2018-03-12--------1
4-----------trip-----------2018-03-15--------1
5-----------birthday-------2018-03-17--------2
2-----------match----------2018-03-13--------2
6-----------birthday-------2018-03-11--------1
3-----------anniversary----2018-03-10--------1

我需要查询它,就像第一行的日期大于今天,状态1应首先显示,然后其余的显示在desc中。

假设今天是2018-03-11,那么带有id 1的行应首先出现,然后其余的行是desc命令

这是我到目前为止所尝试的

SELECT *
FROM events
ORDER BY (date > CURDATE() and status = 1) asc,
         date desc

2 个答案:

答案 0 :(得分:0)

您可以在order by中使用多个键:

order by (date >= curdate() and status = 1) desc,
         date desc

答案 1 :(得分:0)

我相信你的SQL应该是这样的,但如果没有预期的结果就很难说。

<强>查询

SELECT 
 *
FROM 
 [table]
WHERE 
  date > CURDATE()
AND
  status = 1
ORDER BY 
  date ASC
LIMIT 1

UNION 

SELECT 
 *
FROM 
 [table]
WHERE 
   id NOT IN (
    SELECT 
      id
    FROM 
     [table]
    WHERE 
       date > CURDATE()
    AND
       status = 1
    LIMIT 1
   )
 AND
   date > CURDATE()
ORDER BY 
 date DESC