在mysql

时间:2017-06-07 22:48:35

标签: mysql list case

我想优先考虑状态部分。应该首先显示所有不受支持的内容。无论约会。但现在,它在日期之后订购了eveything。如何确定第一个案例“不受支持的部分”的优先顺序?列表的其余部分应该在日期之后出现。

SELECT * FROM list
        ORDER BY date DESC, 
CASE 
        WHEN `bookings`.`status` = 'Not repported'  THEN 1 
        WHEN day= 'Monday' THEN 2 
        WHEN day= 'Tuesday' THEN 3 
        WHEN day= 'Wednesday' THEN 4 
        WHEN day= 'Thursdau' THEN 5 
        WHEN day= 'Friday' THEN 6 
        WHEN day= 'Saturday' THEN 7 WHEN 
        day= 'Sunday' THEN 8 END ASC 
        limit 1,20 ";

我想要这样的东西。

------------------------------
DATE----DAY-------STATUS------
2011---Monday-----Not reported
2015---Sunday-----Not reported
2010---Wednedday--Not reported
2016---Monday---------Reported
2015---Monday---------Reported
2014---Tuesday--------Reported
2013---Sunday---------Reported
------------------------------

2 个答案:

答案 0 :(得分:2)

您有两个订单声明。一个用于约会,一个用于预订状态。 Mysql将根据您的第一个订单声明首先订购,然后根据您的第二个订单声明。因此,切换订单语句可以解决您的问题。另外在mysql中有“CASE”的“ELSE”关键字。

总的来说,我会这样写:

SELECT *
FROM list
ORDER BY  
    CASE 
        WHEN `bookings`.`status` = 'Not repported'  THEN 1 
        ELSE 2
    END ASC,
    date DESC
LIMIT 1,20

(我不太确定你的“预订”表现在来自哪里,但我把它留在那里。你可能会错过一个JOIN条款)

答案 1 :(得分:1)

按顺序更改顺序 像这样的东西

SELECT * FROM list
        ORDER BY  
CASE 
        WHEN `bookings`.`status` = 'Not repported'  THEN 1  ELSE 2 
END,

CASE
        WHEN day= 'Monday' THEN 2 
        WHEN day= 'Tuesday' THEN 3 
        WHEN day= 'Wednesday' THEN 4 
        WHEN day= 'Thursdau' THEN 5 
        WHEN day= 'Friday' THEN 6 
        WHEN day= 'Saturday' THEN 7 WHEN 
        day= 'Sunday' THEN 8 END ASC,

date DESC
        limit 1,20 ";

这会给你这个结果

'不受支持',1/1/2017

'不受支持',3/7/2017

'不受支持',15/8/2017

2017年1月6日星期一

2017年11月11日星期一