CREATE TABLE users (
users_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
first_name VARCHAR( 20 ) NOT NULL,
last_name VARCHAR( 40 ) NOT NULL,
email VARCHAR( 60 ) NOT NULL,
password CHAR( 40 ) NOT NULL,
PRIMARY KEY ( users_id )
);
CREATE TABLE games (
games_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
locations_id MEDIUMINT UNSIGNED NOT NULL
PRIMARY KEY (games_id )
);
CREATE TABLE games_users (
users_id MEDIUMINT UNSIGNED NOT NULL,
games_id MEDIUMINT UNSIGNED NOT NULL,
score MEDIUMINT UNSIGNED NOT NULL,
created DATETIME NOT NULL,
last_updated DATETIME NOT NULL,
PRIMARY KEY ( games_id, users_id )
);
使用上面的表格,每个游戏在2个用户之间,因此每个游戏的games_users有2行,每个玩家一个,获胜者将获得最高分(是的!)。
我想要每场比赛一行,我可以获得胜利和失败分数(使用下面的查询),但我还需要知道胜利者和失败者的身份。
SELECT
*,
min(score) as loser,
max(score) as winner
FROM games
LEFT JOIN
games_members
ON
games_members.games_id = games.games_id
GROUP BY
games_members.games_id
答案 0 :(得分:1)
您可以使用自我加入 如果可以进行绘制,则可以更好地选择列的名称。
select
gu1.games_id,
winner.users_id 'id of the winner',
gu1.score 'score of the winner',
looser.users_id 'id of the looser'
gu2.score 'score of the looser'
from games_users gu1
join games_users gu2 on gu1.games_id = gu2.games_id
join users winner on gu1.users_id = winner.users_is
join users looser on gu2.users_id = looser.users_is
where 1=1
and gu1.score >= gu2.score
and gu1.users_id != gu2.users_id
group by gu1.games_id