繁体   English   中英

在MySQL的WHERE子句中使用IF来排序条件并更新(显示时间表的)列

[英]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_EXTRACTTIME_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM