全部,
我一直在努力研究如何在一个座位区中选择 15 张门票。
编辑:问题是 - 如何找到所有给定尺寸的矩形(例如 3x5)的免费座位?
下面是我的表,查询选择了 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 行,都在彼此的前面。第 9 排座位 10 到 25,第 8 排座位 10 到 25,第 7 排座位 10 到 25。
还可能需要考虑一个座位块是否有不同数量的座位,即角块可能是弧形的,以使后面的座位比前面的座位多。
以增强 SQL 或某些算法或某些 PHP 代码的形式提供的任何指导。我这周的大部分时间都在绞尽脑汁。
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
在此先感谢,需要更多信息,请询问!