На самом деле это зависит от того, на что вы хотите получить результаты возврата.
Чтобы получить номера вместе с количеством «выделенных пользователей», вы запускаете такой запрос.
SELECT r.rid
, r.no_of_persons
, COUNT(p.rid) AS no_allocated
FROM room_detail r
LEFT
JOIN allocated_user p
ON p.rid = r.rid
GROUP
BY r.rid
, r.no_of_persons
Если вы хотите, чтобы исключить строки, которые уже имеют счетчик «allocated_user», то есть не меньше, чем «no_of_persons» для комнаты, вы можете добавить предложения HAVING ...
HAVING r.no_of_persons > COUNT(p.rid)
Что касается заказа этого результата, вы можете добавить предложение ORDER BY
. Для того, чтобы получить «полный» номер первым, с наибольшим «no_of_persons»
ORDER
BY r.no_of_persons - COUNT(p.rid) ASC
, r.no_of_persons DESC
или, как говорит ваш вопрос, если вы хотите, чтобы эти строки заказанных в псевдослучайной моде, вы могли бы сделать (неэффективное) использование функция RAND()
...
ORDER
BY RAND()
(Это может быть неэффективным, так как функция RAND() должна быть оценена для каждой строки возвращается, а затем все строки должны быть отсортированы по значению, возвращаемому этой функции .
Если вы хотите получить только однострочный возврат ed, вы можете добавить предложение LIMIT ...
LIMIT 1
Установить статус в комнате и запросить таблицу для комнаты, которая доступна, и количество человек, которое она может иметь –