0
我在我的MySQL數據庫MySQL查詢全部加入
dc_match_entries with player_id, goals, yellow cards, own goals etc for each match
dc_player player_id, team_id etc etc
dc_team team_is, some stuff etc etc
三個表,我有此查詢過
SELECT
dc_player. *,
dc_team.name AS team_name,
dc_team.abbr_name AS team_abbr_name,
COUNT(dc_match_entry.player_id) AS played,
AVG(dc_match_entry.vote) AS vote_average,
SUM(dc_match_entry.goal) AS goal_sum,
SUM(dc_match_entry.own_goal) AS own_goal_sum,
SUM(dc_match_entry.vote) *10
+ SUM(dc_match_entry.goal) *10
+ SUM(dc_match_entry.r_card) *-10
+ SUM(dc_match_entry.y_card) *-5
+ SUM(dc_match_entry.own_goal) *-10 AS score,
SUM(dc_match_entry.y_card) AS y_card_sum,
SUM(dc_match_entry.r_card) AS r_card_sum
FROM
dc_player,
dc_match_entry,
dc_team
WHERE
dc_player.id = dc_match_entry.player_id AND
dc_player.team = dc_team.id
GROUP BY
dc_player.id
可悲的是這個查詢沒有顯示玩家這還沒有在任何出場比賽競爭(因爲他們沒有dc_match_entry條目)。我無法找到一個簡單的(也可能是清晰的)的方式來顯示這些球員太(全參加?)
PS: 這個查詢嵌套到一個更大的:
SELECT
L.id,
L.role,
L.first_name,
L.last_name,
L.birth_date,
L.team_name,
L.team_abbr_name,
L.team AS team_id,
L.photo,
L.email,
L.played,
L.vote_average,
L.goal_sum AS goal,
L.own_goal_sum AS own_goal,
L.score +
IFNULL(L.c_mvp, 0)*15
+ IFNULL(unbeaten, 0)*50*IF(L.role='P', 1, 0) AS score,
L.y_card_sum AS y_card,
L.r_card_sum AS r_card,
IFNULL(L.c_mvp, 0) AS mvp,
IFNULL(unbeaten, 0) AS unbeaten
FROM (
SELECT * FROM (
SELECT
dc_player. *,
dc_team.name AS team_name,
dc_team.abbr_name AS team_abbr_name,
COUNT(dc_match_entry.player_id) AS played,
AVG(dc_match_entry.vote) AS vote_average,
SUM(dc_match_entry.goal) AS goal_sum,
SUM(dc_match_entry.own_goal) AS own_goal_sum,
SUM(dc_match_entry.vote) *10
+ SUM(dc_match_entry.goal) *10
+ SUM(dc_match_entry.r_card) *-10
+ SUM(dc_match_entry.y_card) *-5
+ SUM(dc_match_entry.own_goal) *-10 AS score,
SUM(dc_match_entry.y_card) AS y_card_sum,
SUM(dc_match_entry.r_card) AS r_card_sum
FROM
dc_player,
dc_match_entry,
dc_team
WHERE
dc_player.id = dc_match_entry.player_id AND
dc_player.team = dc_team.id
GROUP BY
dc_player.id
) LOL
LEFT JOIN (
SELECT
COUNT(dc_match.mvp) c_mvp,
mvp AS player_id
FROM dc_match
WHERE
dc_match.mvp IS NOT NULL
GROUP BY dc_match.mvp
) ROFL
ON ROFL.player_id = LOL.id
ORDER BY
LOL.score DESC
) L
LEFT OUTER JOIN(
SELECT
dc_player.id,
COUNT(dc_match.id) AS unbeaten
FROM
dc_match,
dc_match_entry,
dc_player
WHERE
(
(dc_player.team=dc_match.host AND
dc_match.guest_score=0
) OR
(
dc_player.team=dc_match.guest AND
dc_match.host_score=0
)
) AND
dc_player.id = dc_match_entry.player_id AND dc_match.id = dc_match_entry.match_id
GROUP BY
dc_player.id
) I
ON
L.id = I.id
WHERE
L.team = 2
GROUP BY
id
ORDER BY
role DESC, score DESC