2017-04-11 64 views
0

我正在創建一個幻想足球android應用程序,其中使用php文件和SQL獲取JSON數據。我的問題涉及2個表:使用外鍵從第二個表中獲取值

player_details

  • player_id(主鍵)
  • FIRST_NAME
  • 姓氏

user_team (所有ID除了PK場是外鍵鏈接到player_id)

  • user_team_id(主鍵)
  • goalkeeper_id
  • rightback_id
  • leftback_id

我希望能夠運行PHP腳本,用一個簡單的選擇聲明,它將顯示用戶團隊的詳細信息。我還想包含玩家的名字和姓氏,這些玩家與user_team職位id字段中的外鍵相關聯。但是我只能顯示user_teams的詳細信息和players_id。

SELECT * 
FROM user_team 
WHERE user_id = '".$uid."' 

回答

1

在這種情況下,你必須做許多JOINs,你有你的團隊位置的數量。

一樣,

SELECT u.user_team_name, p1.goalkeeper_name, p2.rightback_name, p3.leftback_name, ... 
FROM user_team u 
    LEFT JOIN player_details p1 ON u.goalkeeper_id = p1.player_id 
    LEFT JOIN player_details p2 ON u.rightback_id = p2.player_id 
    LEFT JOIN player_details p3 ON u.leftback_id = p3.player_id 
    ... 
WHERE u.user_team_id = <some id> 

可行的,但不是很好。

然後,你可能會改變你的模型,並引入第三個表,與團隊和位置捆綁播放器,如:

CREATE TABLE team_positions (
    player_id INT, 
    team_id INT, 
    position TEXT, 

    FOREIGN KEY player_id 
     REFERENCES player_details(player_id) 

    FOREIGN KEY team_id 
     REFERENCES user_team(user_team_id) 
); 

爲了提高數據的consitancy,也可能是通過進一步規範介紹positions表,比你想在ID參考team_positions也是。

與此同時,user_team表會保留團隊的詳細信息,如名稱&任何其他你想放在那裏的東西(會徽,也許?),以及團隊ID。

這樣,你會有相當靈活的結構。而這在關係數據庫模型中的做法通常很常見。

相關問題