电视节目表的SQL查询问题



我有一个表结构:

CREATE TABLE `tv_series_intervals` (
`id_tv_series` int(11) NOT NULL,   
`week_day` smallint(1) NOT NULL DEFAULT 1,
`show_time` TIMESTAMP NOT NULL)

星期一,格式为1,2,3,4,5,6,7

show_time它是一个转换为时间戳的时间,例如,11-45将转换为1970-01-01 11:45:00

如何根据今天的日期时间获取下一个id_tv_series

有人知道我可以通过什么查询做到这一点吗?

一个例子:电视节目(有1个ID(在周三00:00播出,今天是周二23:59,它应该返回ID 1

您能将结构更改为吗

创建表tv_series_intervals(id_tv_seriesint(11(NOT NULL,
week_daysmallint(1(NOT NULL DEFAULT 1,show_time时间不为空(

或者,您可以包含按排序时间的功能

从tv_series_interval中选择*,from_unixtime(show_time,'%h:%i:%s'(时间按时间排序

您可以使用此查询来实现您的目标。

假设今天是第一天,时间是1970-01-01 12:45:00

(SELECT * from db WHERE show_time > '1970-01-01 12:45:00' AND week_day = 1
ORDER BY show_time LIMIT 1)
UNION ALL
(SELECT * from db WHERE week_day > 1 AND NOT EXISTS
(SELECT * from db WHERE show_time > '1970-01-01 12:45:00' and week_day = 1 ORDER BY show_time LIMIT 1)
ORDER BY week_day , show_time LIMIT 1)
UNION ALL
(SELECT * from db WHERE week_day < 1 and NOT EXISTS
(SELECT * from db WHERE show_time > '1970-01-01 12:45:00' AND week_day = 1 ORDER BY show_time LIMIT 1) AND NOT EXISTS
(SELECT * from db WHERE week_day > 1)
ORDER BY week_day , show_time LIMIT 1)

我们今天检查是否有下一个id。如果今天没有id,我们会在其他日子检查最近的id。

在第三个select中,我们检查今天是否是7,并且我们必须回滚到1并在第1天检查最近的id。

对于列show_time,您可以使用float类型而不是时间戳,这也是有意义的。

如果我是你,可以修改后台。我将下一个时间戳完全存储在数据库中,这可以降低复杂性。(例如,下一个电视节目将在18-02-2022 12:10:00上播出(

最新更新