0

我有一个包含电视指南数据的表。

在简化形式中,列如下所示...

_id, title, start_time, end_time, channel_id

我想要做的是创建一个现在/下一个格式的电视节目列表。生成“现在”列表(当前正在广播的内容)很容易,但试图获取显示“下一个”的列表会给我带来问题。

我试过这个...

SELECT * from TV_GUIDE where start_time >= datetime('now') GROUP BY channel_id

果然,这为每台电视提供了一个电视节目,但它为我提供了表格channel_id中的最后一个节目(按日期/时间) 。TV_GUIDE

SQL 不是我的强项,我正在努力找出为什么只返回最后的电视节目。看来我需要做一个查询的子查询(或子查询的查询)。我尝试了 and 的组合,ORDER BYLIMIT它们没有帮助。

4

1 回答 1

1

我相信您首先必须根据您的标准从 TV_GUIDE 中选择情侣 (channel_id, )。然后,您将显示符合这些条件的 TV_GUIDE 记录:

SELECT source.* from TV_GUIDE AS source
JOIN (SELECT channel_id, MIN(start_time) AS start_time
    FROM TV_GUIDE
    WHERE start_time >=  now() GROUP BY channel_id ) AS start_times
ON (source.channel_id = start_times.channel_id 
    AND source.start_time = start_times.start_time)
ORDER BY channel_id;

这首先选择具有最短开始时间的所有节目,每个频道一个,从而为您提供频道 ID 和开始时间。然后从同一个表的 JOIN 中填写其他信息(MySQL 有时允许您从单个查询中检索该信息,但我觉得获取它是一个坏习惯 - 也许您添加了一个字段,它不再起作用)。

您可能希望在组合字段(start_time、channel_id)上添加索引。为了安全起见,将其设为唯一索引。

于 2012-06-24T01:03:18.017 回答