我想优先考虑状态部分。应该首先显示所有不受支持的内容。无论约会。但现在,它在日期之后订购了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
------------------------------
答案 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日星期一