Хотя решение @Gigi является разумным, оно не является полным.
Вы должны каким-то образом зарезервировать места, выбранные посетителем, в противном случае другой посетитель, посещающий одновременно, может зарезервировать те же места.
Вы можете установить время, например, десять минут, в течение которого места остаются зарезервированными для посетителя, который зарезервировал их первым. В течение этого времени этот посетитель может завершить бронирование (т. Е. Ввести данные оплаты и доставки), после чего вы обновляете соответствующие поля, чтобы указать, что места, которые они представляют, больше не должны освобождаться, поскольку они теперь «принадлежат» этому клиенту.
Вы можете запустить, а затем запустить задание на удаление время от времени (например, при каждом просмотре страницы или перед каждой проверкой на наличие свободных мест, или, возможно, с помощью задания cron), которое освобождает места, которые были зарезервированы более чем на десять минут. назад, но чьи оговорки не были завершены.