add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE yth_sections
(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(100)
);


CREATE TABLE yth_rows
(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(100),
section_id INT REFERENCES yth_sections (id)
);

CREATE TABLE yth_seats
(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(100),
row_id INT REFERENCES yth_rows (id),
STATUS INT -- 1 = available, 0 = taken
);
INSERT INTO yth_sections (NAME) VALUES ('A'), ('B'), ('C'), ('D')

INSERT INTO yth_rows (NAME, section_id) VALUES
('1', 1),
('2', 1),
('3', 1),
('4', 1),
('1', 2),
('2', 2),
('3', 2),
('4', 2),
('1', 3),
('2', 3),
('3', 3),
('4', 3),
('1', 4),
('2', 4),
('3', 4),
('4', 4);
INSERT INTO yth_seats (NAME, row_id, STATUS)
SELECT CONCAT(rowName, '-', ROW_NUMBER() OVER (PARTITION BY r.id ORDER BY (SELECT 1))), r.id, 0 FROM information_schema.CHARACTER_SETS s1
CROSS JOIN (SELECT r.id, concat(s.NAME, '-', r.NAME) AS rowName FROM yth_rows r JOIN yth_sections s ON s.id = r.section_id) r
-- free up some seats: 2 in section B, 4 in C, 5 in D
update yth_seats
SET STATUS = 1
WHERE name IN ('B-2-40', 'B-3-15', 'C-1-4', 'C-4-6', 'C-3-9', 'C-3-14', 'D-1-1', 'D-1-2', 'D-1-3', 'D-1-4', 'D-1-5')
SELECT * FROM yth_seats WHERE status = 1
id NAME row_id STATUS
240 B-2-40 6 1
255 B-3-15 7 1
324 C-1-4 9 1
409 C-3-9 11 1
414 C-3-14 11 1
446 C-4-6 12 1
481 D-1-1 13 1
482 D-1-2 13 1
483 D-1-3 13 1
484 D-1-4 13 1
485 D-1-5 13 1
-- find me 4 seats!
SELECT s.*
FROM (SELECT se.id, COUNT(*) AS seats_available
FROM yth_seats s
JOIN yth_rows r
ON s.row_id = r.id
JOIN yth_sections se
ON se.id = r.section_id
WHERE STATUS = 1
GROUP BY se.id) section_available
JOIN yth_sections se
ON se.id = section_available.id
JOIN yth_rows r
ON r.section_id = se.id
JOIN yth_seats s
ON s.row_id = r.id
WHERE section_available.seats_available >= 4
AND s.status = 1
-- your prios, I'm just using
ORDER BY se.NAME
LIMIT 4
id NAME row_id STATUS
414 C-3-14 11 1
409 C-3-9 11 1
324 C-1-4 9 1
446 C-4-6 12 1