[英]Use IF in a WHERE clause in MySQL to order conditions and update a column (of a schedule of shows)
我正在建立一个广播时间表,要在其中显示当前节目或即将进行的节目,或者在第二天的节目中显示。 如果返回第二天的演出,我想财产以后添加到标题像CONCAT_WS(" ", "Don't miss tomorrow:", title)
。 该计划是JSON格式,所以我使用JSON_EXTRACT
和TIME_FORMAT
能够比较的小时值。 这是当前有效的方法,除了它显示即将到来的节目或第二天的节目。 在像“星期二”这样的日子里,今天是一个例子,明天是一个星期三。 BETWEEN
条件和下一个条件选择当前节目OR
今天即将进行的节目。 如何检查所有这些都不适用,如果可以,请选择第二天并更新标题?
SELECT * FROM tableName WHERE visible = 1 AND
JSON_UNQUOTE(JSON_EXTRACT(schedule, '$.tuesday.active')) = 1
AND
(
(
TIME_FORMAT(NOW(), '%H:%i') BETWEEN
TIME_FORMAT(JSON_UNQUOTE(JSON_EXTRACT(schedule, '$.tuesday.time[0]')), '%H:%i') AND
TIME_FORMAT(JSON_UNQUOTE(JSON_EXTRACT(schedule, '$.tuesday.time[1]')), '%H:%i')
)
OR
(
TIME_FORMAT(JSON_UNQUOTE(JSON_EXTRACT(schedule, '$.tuesday.time[0]')), '%H:%i') > TIME_FORMAT(NOW(), '%H:%i') AND
TIME_FORMAT(JSON_UNQUOTE(JSON_EXTRACT(schedule, '$.tuesday.time[1]')), '%H:%i') < TIME_FORMAT(NOW(), '%H:%i')
)
OR
(
id = (SELECT id FROM tableName WHERE visible = 1 AND JSON_UNQUOTE(JSON_EXTRACT(schedule, '$.wednesday.active')) = 1 ORDER BY RAND() LIMIT 1)
)
)
LIMIT 1
我删除了第二个OR条件,并添加了具有相同条件的UNION,因此通过将其限制为一个,它将返回第一个选择的第一行,否则返回第二天的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.