MySQL — автоматически обновлять строку после x секунд бездействия (установить время истечения)

Для арт-проекта я пытаюсь создать сайт заказа.
Концепция позволяет пользователям забронировать макс. из двух временных интервалов с каждым художником. В каждом исполнителе 12 слотов, но каждый слот имеет определенное определение (поэтому каждый слот уникален). Слоты доступны только в течение очень ограниченного времени и, надеюсь, забронированы быстро. Так что за короткий промежуток времени будет много запросов. Я должен убедиться, что каждая статья / слот предлагается только одному пользователю за раз и не может быть забронирована дважды.

Моя идея состояла в том, чтобы проверить наличие следующего незанятого слота (ов) (status = «free») и по этому запросу обновить статус соответствующей строки в таблице до status = «locked». Если пользователь переходит к фактическому резервированию слота статус обновляется до «забронировано».

Если пользователь нажимает «отменить», я могу выпустить статью, обновив строку до status = «free».

Однако не исключено, что пользователи просто покинут сайт, и я не вижу способа проверить это. Слот останется «заблокированным». Я думал, что может быть способ автоматически сбросить статус, например Через 120 секунд он был «заблокирован» и покажет пользователям обратный отсчет. Это может даже усилить фактор возбуждения.

Я не думаю, что работа cron будет работать, так как мне нужно, чтобы якорь был последним обновлением строки, а не конкретной датой-временем.

Я изучил события MySQL, но понял, что не могу манипулировать данными таблицы, к которой он прикреплен.

Буду очень признателен за любые идеи.
Спасибо,
Сэм

0

Решение

  1. В вашей БД вашей таблице статусов добавить datetime поле.

  2. Когда кто-то блокирует slot Вы также сохраняете текущее время, используя NOW()

  3. Когда кто-то обращается к слотам, вы выполняете и обновляете и освобождаете неактивные слоты.

    Update slots
    SET locked = false
    WHERE `datetime`> NOW() - INTERVAL 15 MINUTE;
    
    SELECT *
    FROM slots
    WHERE locked = false;
    
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]