Мне нужно посчитать, сколько голов забил конкретный игрок в конкретную команду, которая играет в конкретном соревновании.У меня есть три стола:
- Матч: содержит все матчи, сыгранные командой за конкретное соревнование (раунд)
- Игрок содержит данные игрока, например: имя, фамилия,рост и т.д ...
- Цель: содержит все голы, забитые этим игроком в матче
Это мой запрос:
$query = "SELECT
COUNT(*) AS goal_scored,
p.first_name AS first_name,
p.last_name AS last_name
FROM `match` m
LEFT JOIN goal g ON g.match_id = m.id
LEFT JOIN player p ON g.player_marker_id = p.id
WHERE m.round_id = :round_id
AND (m.home_team_id = :team_id OR m.away_team_id = :team_id)
GROUP BY p.id
ORDER BY goal_scored DESC
LIMIT 5";
в первомВ части запроса я попытался выбрать все голы, забитые игроком искомой команды, используя соединение на goal
и player
.Я фильтрую те результаты для round
, которые соответствуют Compet.id.
Я ожидаю вернуть лучшего бомбардира команды в конкретном соревновании.
Пример данных
Матч:
id | home_team_id | away_team_id |
1 95 121
2 203 95
3 95 122
Цель:
id | player_marker_id | match_id | team_id | result | type
1 1005 1 95 1 - 0 1
2 1005 1 95 1 - 0 2
3 1005 2 95 2 - 1 1
4 1006 3 95 1 - 0 1
Игрок:
id | first_name | surname
1005 Benedetto Ismael
1006 Ramon Abila
, как вы можете видеть в таблице match
У меня три записи, это означает, что команда 95
имеетсыграл 3 матча.В этой команде два игрока, игрок Benedetto
забил 2 гола, так же как и лидер этой команды, ожидаемый результат должен быть:
Benedetto
Ramon
, но я получаю как goal_scored
неверныйрезультат как 3
забитый гол, это неправильно, потому что type
это не важно в этой области.type
просто говорит мне, какой тип цели, в частности 1 - это цель, которая открыла матч, а 2 - нормальная цель.Цель может иметь несколько типов, максимум до 2.
Кроме того, я обнаружил еще одну ошибку: разные игроки могут забивать в одном матче, но результат goal_scored
неверен, потому что мне нужно только считатьгол, забитый конкретным игроком, присоединился не ко всем игрокам команды.
Как я могу исправить свой запрос?
Результат производства
SELECT * FROM `match` m
LEFT JOIN goal g ON m.id = g.match_id AND g.player_marker_id = 68165
WHERE m.round_id = 488 AND (m.home_team_id = 95 OR m.away_team_id = 95)
