如果t_date(column_name)是今天的日期,那么
select * from `schedules`
ORDER BY available_seats <= 0 , STR_TO_DATE(departure_time,'%h:%i%p');
否则
select * from `schedules`
ORDER BY (available_seats <= 0 && (STR_TO_DATE(departure_time,'%h:%i%p') >= TIME(NOW()))), (STR_TO_DATE(departure_time,'%h:%i%p') <= TIME(NOW())), STR_TO_DATE(departure_time,'%h:%i%p');
END
查询1适用于t_date = DATE(now())
查询2适用于t_date!= DATE(now())
我怎样才能在一个查询条件中按条件查询?
答案 0 :(得分:0)
您可以使用CASE
,如下所示
SELECT *
FROM `schedules`
ORDER BY
available_seats <= 0 ,
CASE WHEN t_date <> CURRENT_DATE() AND (available_seats <= 0 && (STR_TO_DATE(departure_time,'%h:%i%p') >= TIME(NOW())))
THEN
(STR_TO_DATE(departure_time,'%h:%i%p') <= TIME(NOW()))
WHEN t_date = CURRENT_DATE()
THEN STR_TO_DATE(departure_time,'%h:%i%p')
ELSE STR_TO_DATE(departure_time,'%h:%i%p') END,
STR_TO_DATE(departure_time,'%h:%i%p')
答案 1 :(得分:0)
在英语中,您实际上是在尝试获取订单,并可能会调整您的问题以澄清......
但是,我想你可能想要所有&#34; available_seats&#34;值小于或等于零FIRST,那么基于今天的日期。如果是这种情况,您可能需要类似......
order by
case when available_seats <= 0 then 1 else 2 end,
STR_TO_DATE(departure_time,'%h:%i%p')
但它应该可以在一个简单的单一查询中完成,但是没有关于座位,日期是什么以及你想要什么和为什么的背景......你是否正在寻找像&#34;售完& #34;事件排序到列表顶部,然后根据事件的日期列出最先出现的事件?
我有上面的情况/基本上放置任何返回的记录,在第一顺序中有可用座位&lt; = 0而不管实际的0或负值...然后,其他任何东西,如果剩下1个座位或1000个座位排序后。订单的第二部分就是在date_time字段本身。由于订单依次是&#34;格式化的&#34;可能在字段列表中检索的列,我只是按照您的日期/基础转换进行排序。