2012-01-13 54 views
0

我有三張表,我希望能夠有一個HTML選擇選項來顯示玩家的名字以及他們能夠玩的主要和次要位置。玩家表只將它們存儲爲整數,而不是它們被稱爲。我創建了一個查找表,將數字轉換爲實際位置,例如「C」=「1」。當我運行下面的SQL查詢時,它不會在我的數組中顯示任何內容。加入三張表和PHP的SQL代碼

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 

回答

2

看看在你的查詢條件之一:

PosLookup.PosNbr = Player.PrimaryPosition 
AND PosLookup.PosNbr = Player.SecondaryPosition 

所以(例如Bob)你問行,其中PosNbr爲2(鮑勃的主要位置)和PosNbr是1(鮑勃的次要位置)。 這不是更多鈔票,因爲單個PosNbr不能同時爲1和2。

此外,PosLabel2列是PosLookup表不必要(如果它只是一個PosLabel克隆)。

如果你只是想要一個表,基本上是PlayerPrimaryPositionSecondaryPosition和(由TeamID和過濾)的Player_ID取代之名取代的標籤嘗試:

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       | 
+-----------+------------+----------+-----------+ 

現在使用

echo "<option value = $row[Player_ID] >$row[PlayerName] $row[PosLabel] $row[PosLabel2]</option>"; 
+0

不行,它仍然只顯示他們玩的一個位置 – punkdis 2012-01-13 06:08:06

+0

啊哈,可能是因爲兩者都返回c olumns被稱爲'PosLabel',所以'$ row ['PosLabel']'被覆蓋。更新答案。 – 2012-01-13 06:32:57

+0

就是這樣。謝謝 – punkdis 2012-01-13 13:26:03

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' 
+0

在我的php數組中沒有顯示任何內容 – punkdis 2012-01-13 06:08:25