Я создаю запрос, ограниченный указанным количеством мест, который выбирает группу мест из карты мест, которая разделена на секции.
Он пытается получить все необходимые места из одной и той же секции, но если в этой секции недостаточно мест для удовлетворения запрошенного количества, он забирает оставшиеся места из следующей секции.
Не хорошо.
Хотя я, вероятно, могу найти в PHP сложный способ получения набора результатов, проверьте наличие более одного раздела и, если это так, пропустите первые несколько доступных мест в разделе, в которых недостаточно доступного количества, и повторите запрос еще раз, чтобы убедиться, что я получил все необходимые места в следующем разделе.
Уф! Беспорядочный.
Однако я бы хотел выяснить это в SQL. Код ниже.
SELECT et.id, et.event_id, et.seat_id, et.zone_id, s.seat_number, r.row_name, r.row_priority, sc.section_name, sc.section_priority, z.zone_name, s.seat_handicap, s.seat_obstructed, ticket_base_price, yth_boxoffice_ticket_fee, yth_online_ticket_fee, vendor_boxoffice_ticket_fee, vendor_online_ticket_fee
FROM yth_event_tickets et
LEFT JOIN yth_seats s ON et.seat_id = s.id
RIGHT JOIN yth_seatmap_rows r ON s.seat_row_id = r.id
RIGHT JOIN yth_seatmap_sections sc ON r.row_section_id = sc.id
RIGHT JOIN yth_seatmap_zones z ON sc.section_zone_id = z.id
WHERE event_id = 101252413
AND zone_id = 1
AND ticket_status = 1
AND s.seat_active = 1
ORDER BY r.row_priority ASC, sc.section_priority ASC, s.seat_priority ASC
LIMIT 4
Я заказываю сначала по строке, затем по секции. Таким образом, он обходит стадион и сначала захватывает первую строку из каждой секции, а когда они заполнены, начинается со строки 2 и т. Д., Так что он выбирает «наилучшую доступную» обратно.
Как видите, я хочу только 4 места. Я получаю 2 места в Разделе B, но затем Раздел B заполняется, поэтому я получаю оставшиеся 2 места из Раздела C. Что я хотел бы иметь, так это пропустить последние 2 места в Разделе B и получить свои 4 места в Разделе C. Кроме того, если в Разделе C есть, скажем, <4 оставшихся мест, пропустите его и перейдите к Разделу D и т. д. </p>