2012-01-13 18 views
0

私は、プレイヤーの名前とプレイできるプライマリとセカンダリの位置を表示するHTML選択オプションを持つことができる3つのテーブルを持っています。 Playerテーブルは、それらを整数として保存するだけで、それらが知られているものではありません。私は数字を実際の位置、例えば "C" = "1"に変換するルックアップテーブルを作成しました。以下のSQLクエリを実行すると、配列に何も表示されません。3つのテーブルと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(ボブのセカンダリポジション)です。 (それはPosLabelのちょうどクローンの場合) 単一PosNbrはまた、両方の1および2

ことができないので、これはかのうではない、PosLabel2列がPosLookupテーブルに不要です。

あなただけの基本的PlayerPrimaryPositionSecondaryPositionためで置換ラベルと名前Player_IDためで置換された(と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       | 
+-----------+------------+----------+-----------+ 

は今

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

まだ再生している位置が1つ表示されていない – punkdis

+0

Aha olumnsは 'PosLabel'と呼ばれ、' $ row ['PosLabel'] 'は上書きされています。回答を更新しています。 –

+0

そうだね。ありがとう – punkdis

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

関連する問題