Для арт-проекта я пытаюсь создать сайт заказа.
Концепция позволяет пользователям забронировать макс. из двух временных интервалов с каждым художником. В каждом исполнителе 12 слотов, но каждый слот имеет определенное определение (поэтому каждый слот уникален). Слоты доступны только в течение очень ограниченного времени и, надеюсь, забронированы быстро. Так что за короткий промежуток времени будет много запросов. Я должен убедиться, что каждая статья / слот предлагается только одному пользователю за раз и не может быть забронирована дважды.
Моя идея состояла в том, чтобы проверить наличие следующего незанятого слота (ов) (status = «free») и по этому запросу обновить статус соответствующей строки в таблице до status = «locked». Если пользователь переходит к фактическому резервированию слота статус обновляется до «забронировано».
Если пользователь нажимает «отменить», я могу выпустить статью, обновив строку до status = «free».
Однако не исключено, что пользователи просто покинут сайт, и я не вижу способа проверить это. Слот останется «заблокированным». Я думал, что может быть способ автоматически сбросить статус, например Через 120 секунд он был «заблокирован» и покажет пользователям обратный отсчет. Это может даже усилить фактор возбуждения.
Я не думаю, что работа cron будет работать, так как мне нужно, чтобы якорь был последним обновлением строки, а не конкретной датой-временем.
Я изучил события MySQL, но понял, что не могу манипулировать данными таблицы, к которой он прикреплен.
Буду очень признателен за любые идеи.
Спасибо,
Сэм
В вашей БД вашей таблице статусов добавить datetime
поле.
Когда кто-то блокирует slot
Вы также сохраняете текущее время, используя NOW()
Когда кто-то обращается к слотам, вы выполняете и обновляете и освобождаете неактивные слоты.
Update slots
SET locked = false
WHERE `datetime`> NOW() - INTERVAL 15 MINUTE;
SELECT *
FROM slots
WHERE locked = false;
Других решений пока нет …