我有三张桌子,我希望能够有一个HTML选择选项,显示播放器的名称及其能够播放的主要和次要位置。 Player表只将它们存储为整数而不是它们的所谓。我创建了一个查找表,将数字转换为实际位置,例如“C”=“1”。当我运行下面的SQL Query时,它不会在我的数组中显示任何内容。
Player
Player_ID PrimaryPosition SecondaryPosition PlayerName
1 2 1 Bob
2 1 3 Billy
Team
Player_ID TeamID TeamName
1 1 Hobos
2 1 Rejects
PosLookup
PosNbr PosLabel PosLabel2
1 C C
2 P P
3 1B 1B
SELECT Player.PlayerName, PosLookup.PosLabel, PosLookup.PosLabel2, Player.Player_ID FROM Team, Player, PosLookup WHERE Player.Player_ID = Team.Player_ID and Team.TeamID = '1' and PosLookup.PosNbr = Player.PrimaryPosition and PosLookup.PosNbr = Player.SecondaryPosition ORDER BY PosLabel ASC
foreach($rowarray as $row)
{
echo "<option value = $row[PlayerID] >$row[PlayerName] $row[PosLabel] $row[PosLabel2]</option>";
$cntr++;
}
Desired OUTPUT Dropdown
Bob P C
Billy C 1B
答案 0 :(得分:2)
查看查询中的一个条件:
PosLookup.PosNbr = Player.PrimaryPosition
AND PosLookup.PosNbr = Player.SecondaryPosition
所以(例如Bob
)你要求PosNbr
为2(Bob的主要位置)和PosNbr
为1(Bob的次要位置)的行。
这是不可行的,因为单个PosNbr
不能同时为1和2。
此外,PosLabel2
表中不需要PosLookup
列(如果它只是PosLabel
的克隆)。
如果您只想要一张基本上为Player
的表格,并在PrimaryPosition
和SecondaryPosition
中替换标签,并在Player_ID
中替换名称(并过滤{ {1}})尝试:
TeamID
现在使用
SELECT Player.Player_ID, Player.PlayerName, p1.PosLabel, p2.PosLabel AS PosLabel2
FROM Player
LEFT JOIN PosLookup p1 ON Player.PrimaryPosition=p1.PosNbr
LEFT JOIN PosLookup p2 ON Player.SecondaryPosition=p2.PosNbr
LEFT JOIN Team ON Team.Player_ID = Player.Player_ID
WHERE Team.TeamID=1;
+-----------+------------+----------+-----------+
| Player_ID | PlayerName | PosLabel | PosLabel2 |
+-----------+------------+----------+-----------+
| 1 | Bob | P | C |
| 2 | Billy | C | 1B |
+-----------+------------+----------+-----------+
答案 1 :(得分:0)
试试这个:
SELECT
p.PlayerName, l1.PosLabel , l2.PosLabel
FROM
Player p, Team t
LEFT JOIN PosLookup l1 on p.PrimaryPosition = l1.PrimaryPosition,
LEFT JOIN PosLookup l2 on p.SecondaryPosition = l2.SecondaryPosition,
WHERE
p.TeamID = t.TeamID
t.TeamID = '1'