这是我第一次问一个问题,英语不是我的母语。我事先为任何拼写错误或行为不端道歉。现在我的问题是:我有一张看起来像这样的桌子。 (图片1)1。每个预订的时间是半小时2.总是有booking_date,小时和分钟3.有些行有delivery_date,有些行还没有4. Delivery_date总是在预订之后_date
如果打印出来的那天是例如(2018-12-01),我希望按照查看日期(2018-12-01)订购该表,要么是first_date OR delivery_date,它是第一个。 AND应按每个(小时,分钟)排序。如下所示:(图片2)
你可以看到它从01行跳到08然后回到05,然后到02.这是因为它必须按小时和分钟排序。然而,delivery_date具有在行之间跳转的优先级(如第05行)
我试过这个SQL:
SELECT * FROM booking WHERE booking_date=$b_date OR DATE(delivery_date)=$b_date ORDER BY hour, minute ASC, HOUR(delivery_date), MINUTE(delivery_date) ASC
这将给我按小时,分钟正确订购的booking_date,但是delivery_date没有正确订购
然后我也搜索了,在Stackoverflow.com上找到并尝试了这个:
SELECT * FROM booking WHERE booking_date=$b_date OR DATE(delivery_date)=$b_date ORDER BY CASE WHEN booking_date=$b_date THEN hour, minute WHEN DATE(delivery_date)=$b_date THEN HOUR(delivery_date), MINUTE(delivery_date) END ASC
这给了我以下错误:
查看与您的MySQL服务器版本对应的手册,以便在'分钟附近使用正确的语法时使用(delivery_date)= $ b_date那么在第1行的那一天(delivery_date),MINUTE(delivery_date)END'
那是“小时”之后的逗号。我接受它,它不喜欢逗号,所以我不能使用2列ORDER BY。当我只使用一列时它可以工作,但会议记录错误。有没有办法在ORDER BY中使用2列?
THEN
子句只能指定一个值。相反,您可以按分钟订购:
SELECT *
FROM booking
WHERE booking_date=$b_date OR DATE(delivery_date)=$b_date
ORDER BY CASE WHEN booking_date=$b_date
THEN hour * 60 + minute
WHEN DATE(delivery_date)=$b_date
THEN HOUR(delivery_date) * 60 + MINUTE(delivery_date)
END ASC