У меня есть таблица с именем match
, которая содержит все matches
футбольного соревнования. Структура таблицы следующая:
id | round_id | datetime | status | home | away | result
по существу каждый match
имеет status
, которые указывают:
- Запланированные
- Перенесенные
- Отменено
- Игра
- Закончено
есть также round_id
, указывающий ссылку на competition
.
В моем приложении я проверяю каждый раз, нужно ли обновлять конкретный round
. Для этого сначала я проверяю, все ли matches
лиги имеют статус 3
или 5
. Запрос следующий:
SELECT (COUNT(*) = SUM(status in (3, 5))
AND COUNT(*) = 380) AS result
FROM `match` WHERE round_id = 10
Так что, если 380
совпадения отменены или завершены, то round
10 обновляется.
Если результат запроса выше ложен, поэтому раунд должен быть обновлен, тогда я должен проверить, какой matches
должен быть обновлен.
Для этого я написал следующий запрос:
SELECT COUNT(*) AS result FROM `match` m2
WHERE m2.round_id = 10
AND m2.datetime < NOW() AND m2.status IN (1, 2)
запрос выше проверяет, есть ли matches
с datetime
ниже, чем текущий, и если их статус 1
или 2
, конкретно (запланировано и отложено).
Я не очень доволен своей реализацией по следующим причинам:
- Мне нужно выполнить два запроса для проверки необходимости обновления.
- Последний запрос возвращает номер
match
, но моя цель - вернуть boolean
. К сожалению, мои навыки sql
не настолько развиты.
Можно ли объединить эти два запроса в один для простой проверки?
Заранее спасибо за помощь.
ОБНОВЛЕНИЕ - БАЗА ДАННЫХ СО СТРУКТУРОЙ ДАННЫХ :
id | round_id | datetime | status | home | away | result
1 10 2018-08-15 00:00:00 5 A B 1-0
2 10 2018-08-15 00:00:00 5 C D 1-1
3 10 2018-08-15 00:00:00 5 E F 2-1
4 10 2018-08-15 00:00:00 5 G H 2-2
все вышеприведенные matches
обновлены, так как статус 5
, поэтому round
10 не нуждается в обновлении. Первый запрос вернет true
, а второй запрос вернет 0.
Рассмотрим теперь этот пример:
id | round_id | datetime | status | home | away | result
1 11 2018-08-15 00:00:00 5 A B 1-0
2 11 2019-08-15 00:00:00 1 C D
3 11 2019-01-15 00:00:00 5 E F 2-1
4 11 2019-03-12 00:00:00 1 G H
round
11 необходимо обновить, потому что у нас запланировано 2 matches
, но только match
с id
4 уже сыграно, поэтому запрос должен вернуть false
, потому что round
11 не обновляется.