如何在Mysql中使用案例?

时间:2014-08-20 09:12:26

标签: mysql

如果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())

我怎样才能在一个查询条件中按条件查询?

2 个答案:

答案 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;可能在字段列表中检索的列,我只是按照您的日期/基础转换进行排序。