我目前正在使用 PHP 和 mysql 开发一个网络应用程序,允许管理员添加电影和放映时间。
电影院有 3 个不同的剧院:剧院 1、剧院 2 和剧院 3。
我在组合多个放映时间时遇到了问题。
这是我的“table_showtimes”。
movie day_start day_end showtime theatre
Hobbit 2014-01-01 2014-01-10 16.00 1
Hobbit 2014-01-08 2014-01-14 18.00 1
如您所见,电影“霍比特人”将于 1 月 1 日至 1 月 10 日下午 4 点在 1 号剧院放映 从 1 月 8 日到 1 月 14 日下午 6 点也在 1 号剧院。
现在,我想为用户显示以下前端 View ,按时间顺序排列:
HOBBIT
01/01 - 07/01 16.00 Theatre 1
08/01 - 10/01 16.00 + 18.00 Theatre 1
11/01 - 14/01 18.00 Theatre 1
我在显示合并的 showimtes (16.00 + 18.00) 时遇到困难。
你认为我应该遍历一个月的每一天并检查可用的放映时间还是通过 SQL 进行排序?
非常感谢您的建议! 马蒂亚斯
最佳答案
需要 GROUP_CONCAT 来汇总放映时间。
我简单地设置了这个:http://sqlfiddle.com/#!2/f8e40/32/0
基本上,您需要从一种枚举所有日期的方法开始,如下所示:
SELECT (day_start + INTERVAL numbers.number DAY) as DAY
FROM (
SELECT min(day_start) AS day_start,
max(day_end) AS day_end
FROM showtimes
) AS daterange
JOIN (
SELECT (u.number + 10*t.number + 100*h.number) AS number
FROM number AS u
JOIN number AS t
JOIN number AS h
ORDER BY number
) AS numbers
WHERE numbers.number <= datediff(day_end, day_start)
然后您像这样将它加入您的放映时间表,以获得包含每一天的行的结果集。
SELECT day,
movie,
GROUP_CONCAT(date_format(showtime,'%H:%i')
ORDER BY showtime
SEPARATOR ' + ') AS showtimes,
theatre
FROM showtimes AS s
JOIN (
/* the query enumerating the days */
) AS d
ON d.day BETWEEN s.day_start AND s.day_end
GROUP BY day,movie, theatre
了解 GROUP_CONCAT 如何在 GROUP BY 的上下文中工作?
GROUP_CONCAT(date_format(showtime,'%H:%i')
ORDER BY showtime
SEPARATOR ' + ') AS showtimes
特别说明:我必须创建一个包含从 0 到 9 的整数的表编号,才能使日期枚举起作用。
关于php - 电影院/电影院的调度系统 - 多个放映时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914708/