我目前正在开发一个与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上映。
现在,我想为用户显示以下按时间排序的前端视图:
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我在显示组合显示(16.00 + 18.00)时遇到了困难。
您是否认为我应该遍历一个月的每一天并检查可用的放映时间或通过SQL进行排序?
非常感谢您的建议!马蒂亚斯
发布于 2014-01-04 11:08:24
它需要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)然后像这样将它连接到showtime表中,得到一个每天都有一行的结果集。
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的整数的表数字,才能使日期枚举工作。
https://stackoverflow.com/questions/20914708
复制相似问题