电影院/电影院的调度系统 - 多个放映时间

时间:2014-01-03 23:37:19

标签: php mysql

我目前正在开发一个使用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日也是在剧院1的下午6点。

现在,我想为用户显示以下前端视图,按时间顺序排序:

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排序吗?

非常感谢您的建议! 的Matthias

1 个答案:

答案 0 :(得分:0)

将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)

然后你将它加入到你的showtimes表中,以获得每天一行的结果集。

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整数的表格编号,以使日期枚举生效。