全て、
私は、1つの座席ブロック内でたとえば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
よろしくお願いします。詳細が必要な場合は、お問い合わせください。