Sql проверить значение в столбце больше, чем количество строк - PullRequest
0 голосов
/ 19 октября 2019

Я создаю веб-приложение, в котором клиент может заказать услугу у бизнеса (поставщика) . но первому поставщику необходимо добавить, какие услуги он предоставляет, где он может предоставлять эти услуги и с в какое время (время начала), в какое время (время окончания) сколько пользователей доступно

поэтому я сбиваю с толку, если предположим, что клиент заказывает услугу на определенное время, а когда другой клиент заказывает услугу у этого поставщика, мы должны рассчитать, является ли количество пользователей, доступных в этот период времени, больше, чем количество уже забронированных (которыееще не завершено) в это конкретное время

у меня есть эти три таблицы

users = (for both customer & vendors)

id | name | address | role_id 
1 | Customer | some address | 1
2 | Vendor | Some Address | 2
3 | Another Customer | Some address | 1
4 | Another Vendor | address | 2
vendor_available_time = (only for vendor)

id | date_start_time | date_end_time | no_of_users |vendor_id
1 | 2019-10-16 00:00:00 | 2019-19-16 23:59:59 | 3 | 2
1 | 2019-10-16 09:00:00 | 2019-19-16 17:00:00 | 1 | 4
1 | 2019-10-17 00:00:00 | 2019-19-17 23:59:59 | 3 | 2
1 | 2019-10-17 09:00:00 | 2019-19-17 17:00:00 | 2 | 4

bookings = (for both)
id | booking_status | booking_datetime | customer_id | vendor_id 
1 | job started | 2019-10-16 10:00:00 | 1 | 2 
1 | completed | 2019-10-15 10:00:00 | 1 | 2
1 | accepted  | 2019-10-16 09:00:00 | 3 | 2
1 | work in progress  | 2019-10-16 09:00:00 | 3 | 2

, пожалуйста, помогите мне с запросом

, где я могу получитьвсе поставщики, чьи no_of_users больше, чем count (бронирования), где booking_datetime> = date_start_time и booking_datetime

Любое предложение будетБуду очень признателен, могу ли я получить эти результаты из одного запроса, если я буду использовать несколько запросов или я должен изменить свойструктура базы данных

Требуемый вывод - это просто user_ids, которые доступны для этого периода времени и количество пользователей которых превышает количество заказов на это время

1 Ответ

1 голос
/ 19 октября 2019

Это то, что вы хотите?

       Select  b.vendor_id from 
       bookings b join vendor_available_time v on b.vendor_id=v.id
      where b.booking_datetime >= v.date_start_time and 
       b.booking_datetime < v.date_end_time 
       and b.booking_status not in ['completed', 'rejected', 'cancelled']

     group by b.vendor_id having count(distinct b.id) <=count(b.customer_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...