所有,
我一直在努力解决如何在一个座位内选择15张门票.
编辑:问题是 – 如何查找给定尺寸的所有矩形(例如3×5)的免费座位?
以下是我的表,查询选择连续4个座位(或15个或更多),这是很好的…
但是我想做的是选择说15个座位,这些座位可能会被分成多行,即3 x 5,但是我希望它们被阻塞在一起,即
row 9 ..(some seats)..[5 seats]..(some seats)..
row 8 ..(some seats)..[5 seats]..(some seats)..
row 7 ..(some seats)..[5 seats]..(some seats)..
即他们将在彼此前面的3行. row9座位10到25,row8座位10到25,row7座位10到25.
也可能需要考虑如果座椅座具有不同数量的座椅,即角块可能处于弧形以在后面比前侧具有更多的座椅.
任何形式指导SQL或某些算法或一些PHP代码.一周之内的大部分时间里,我一直在.acking大脑.
CREATE TABLE `seats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`event_id` int(11) DEFAULT NULL,
`performance` int(11) DEFAULT NULL,
`block` int(11) DEFAULT NULL,
`row` int(11) DEFAULT NULL,
`seat` int(11) DEFAULT NULL,
`status` int(10) DEFAULT 1,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
我的查询至今 – 返回X个座位的组合.
SELECT a.event_id, a.performance, a.block,
a.row, a.seat AS start_seat,
a.seat + (4 - 1) AS end_seat,
4 AS requested_seats,
a.id AS start_allocation_id
FROM seats a
LEFT JOIN seats b ON
a.event_id = b.event_id AND
a.performance = b.performance AND
a.block = b.block AND
a.row = b.row AND
a.seat < b.seat AND
b.seat < a.seat + 4 AND
b.status = 1
WHERE a.status = 1 AND
a.event_id = 1
GROUP BY a.seat
HAVING COUNT(b.seat) + 1 = 4
ORDER BY performance
提前感谢,需要更多的信息请问!