我有一张包含电视指南数据的表格。
以简化形式,列如下所示......
_id, title, start_time, end_time, channel_id
我要做的是以NOW / NEXT格式创建电视节目列表。生成“NOW”列表(当前正在播放的内容)很简单,但是尝试获取显示“NEXT”的列表会导致我出现问题。
我试过了......
SELECT * from TV_GUIDE where start_time >= datetime('now') GROUP BY channel_id
这足以让我为每部电视channel_id
提供一个电视节目,但它给了我TV_GUIDE
表中的最后一个节目(按日期/时间)。
SQL不是我的强项,我正在努力解决为什么只返回最后一个电视节目。我似乎需要对查询(或子查询的查询)进行子查询。我尝试了ORDER BY
和LIMIT
的组合,但他们没有帮助。
答案 0 :(得分: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和开始时间。然后填写其他信息(MySQL有时会让你从单个查询中检索它,但我觉得从一个具有相同表格的JOIN中获取 - 也许你添加一个字段并且它将不再起作用)是一个坏习惯。 / p>
您可能希望在组合字段(start_time,channel_id)上添加索引。为了安全起见,请将其设为独特的索引。