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

标签 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 日下午 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/

相关文章:

php - 更改不同页面上包含的 PHP 的背景颜色?

php - 计算一串单词中匹配单词的百分比

javascript - 提交时如何使单选字段确定下一页

mysql - 从多个表的单个列中检索数据以充当另一个表的列

MySQL 服务器未启动且不存在于 Services.msc 中

mysql - javascript mysql 客户端

mysql - 使用 LEFT JOIN 和 UNION 组合多个表

php foreach 仅使用动态数据循环一次

php - 如何合并sql查询的结果集?

mysql - "Table doesn' t存在”问题