SQL如何INNER JOIN具有相似字段名称的多个值

时间:2013-04-23 16:31:38

标签: sql join

我有一张名为玩家

的表格
p_id | first    | last
========================
1    | Michael  | Jordan
2    | Charles  | Barkley
3    | Kobe     | Bryant
4    | Allen    | Iverson
5    | Kevin    | Garnett

然后我有一个名为用户

的表格
u_id | user | player_1 | player_2 | player_3
============================================
1    | John | 1        | 2        | 5
2    | Jane | 3        | 4        | 5
3    | Jim  | 2        | 3        | 4

通过网站上的表单,用户选择他们的玩家(字段:player_1,player_2,player_3对应于玩家表中的id

我正在尝试运行INNER JOIN,我在用户表中打印用户并选择其播放器选择(第一个,最后一个)

到目前为止,我有这个

SELECT * FROM users 
INNER JOIN players p1 ON player_1 = p1.player_id                
INNER JOIN players p2 ON player_2 = p2.player_id                
INNER JOIN players p3 ON player_3 = p3.player_id                
INNER JOIN players p4 ON player_4 = p4.player_id                
INNER JOIN players p5 ON player_5 = p5.player_id                
ORDER BY data";

当我跑步时

while ($row = mysql_fetch_assoc($result_users))
{
$player_1_first = $row['player_name'];      
$player_1_last = $row['player_last'];

echo $player_1_first." ".$player_2_last;
}

我只收到用户的最后一个选择。

我的任务: 如何才能正确地完成我想要实现的目标?

2 个答案:

答案 0 :(得分:0)

这是一个可能的解决方案:

SELECT users.*, p1.player_id AS player1_id, p2.player_id AS player2_id, p3.player_id AS player3_id, p4.player_id AS player4_id, p5.player_id AS player5_id FROM users 
INNER JOIN players p1 ON player_1 = p1.player_id                
INNER JOIN players p2 ON player_2 = p2.player_id                
INNER JOIN players p3 ON player_3 = p3.player_id                
INNER JOIN players p4 ON player_4 = p4.player_id                
INNER JOIN players p5 ON player_5 = p5.player_id                
ORDER BY data";

在PHP代码中,您当然会按照名称选择字段,因为它们在Select子句中被“重命名”。

但是你也应该修改你的数据库模式,因为一个好的模式不会有这个问题。

答案 1 :(得分:0)

如果我理解你的目标(你真的没说),你需要更改选择以请求你想要的输出 所以

SELECT users.FieldsYouWant, 
p1.first as p1first, p1.last as p1last, 
p2.first as p2first, p2.last as p2last,
p3.first as p3first, p3.last as p3last, 
p4.first as p4first, p4.last as p4last, 
p5.first as p5first, p5.last as p5last 
FROM users 
INNER JOIN players p1 ON player_1 = p1.player_id                
INNER JOIN players p2 ON player_2 = p2.player_id                
INNER JOIN players p3 ON player_3 = p3.player_id                
INNER JOIN players p4 ON player_4 = p4.player_id                
INNER JOIN players p5 ON player_5 = p5.player_id                
ORDER BY data";  

然后在输出中读取一行中的所有5个名称 请注意,如果用户没有选择5个玩家,则无法获得任何内容