Ограничение количества резервирований на пользователя с PHP и MySQL

Мои пользователи могут создавать резервирование, но я хотел бы ограничить его — скажем, один пользователь может сделать максимум 5 резервирований со статусом «Ожидание», после того как администратор утвердит резервирование и ожидающие изменения статуса для утверждения, пользователь может сделать еще одно резервирование.

Статус ожидания предоставляется по умолчанию, когда пользователь делает бронирование. Чего я хотел бы добиться, так это того, что если в таблице бронирований есть 5 ожидающих бронирований под одним и тем же user_id, пользователь не может сделать новое бронирование, поэтому он получает предупреждение о том, что он не может делать больше бронирований.

Мой вопрос в том, как я могу этого добиться? Это с помощью COUNT или мне нужно создать для него триггер? Буду признателен за любой совет, как с этим бороться.


person Community    schedule 18.01.2021    source источник
comment
Вам понадобится такой запрос: SELECT COUNT(*) as number_of_reservations FROM reservations WHERE user_id = id and status = 'pending'. Если он выше 5, верните сообщение об ошибке.   -  person Daan    schedule 18.01.2021
comment
Спасибо, @Daan, это следует использовать в моем запросе на создание бронирования или отдельно?   -  person    schedule 18.01.2021
comment
Может ли пользователь сделать несколько бронирований одним щелчком мыши?   -  person KIKO Software    schedule 18.01.2021
comment
Я бы выполнил запрос на выбор еще до того, как вы вызовете запрос на создание резервирования.   -  person Daan    schedule 18.01.2021
comment
Нет, @KIKOSoftware, каждый дом, который вы можете зарезервировать, имеет свой идентификатор, поэтому один дом - одна кнопка резервирования - одна бронь.   -  person    schedule 18.01.2021


Ответы (1)


Самый простой способ — выполнить другой запрос при обработке пользовательского ввода. Новый запрос будет выполнять что-то похожее на SELECT COUNT(*) FROM reservations WHERE user_id=? AND status='pending'. Затем вы можете проверить в PHP результат этого запроса. Если он больше или равен установленному вами лимиту, отобразите сообщение для пользователя, информирующее его о том, что он достиг максимального количества ожидающих резервирований и ему нужно подождать.

Псевдокод:

  1. Если требуется новое бронирование

  2. Подготовьте отчет для проверки количества незавершенных резервирований для текущего пользователя.

  3. Выполнить и получить результат

  4. Если счет ›= 5

    4.1. Остановить обработку запроса и отобразить сообщение пользователю

  5. Еще

    5.1. Продолжите вставку нового резервирования.

person Dharman    schedule 18.01.2021