#mysql #sql
#mysql #sql
Вопрос:
Я разработал игру, в которой проводится много турниров. Все запущенные турниры хранятся в таблице running_tournaments. Когда игрок участвует в турнире, его оценка за этот турнир сохраняется в таблице результатов.
Я хотел бы написать скрипт, который периодически проверяет базу данных, чтобы узнать, закончились ли какие-либо турниры (их end_date в прошлом), И все результаты для этого турнира были «проверены». Оценка считается проверенной, если проверенное значение для этой оценки равно «1».
Как я могу запросить эти таблицы, чтобы вернуть все турнирные идентификаторы турниров, где все результаты для этого турнира были проверены (проверено = 1)?
В качестве примера, учитывая приведенные ниже данные, если сегодняшняя дата — 3 января, запрос должен возвращать только идентификатор турнира # 1. Идентификатор турнира 1 имеет два результата, которые были проверены, и его дата — сегодня или раньше. Все остальные турниры либо в будущем, либо имеют 1 или более баллов, которые не проверены.
Ответ №1:
Хммм … я думаю join
, и group by
делает то, что вы хотите:
select s.tourn_id
from scores s join
running_tournaments rt
on s.tourn_id = rt.id
where end_date <= curdate()
group by s.tourn_id
having min(s.verified) = 1;