[英]Assistance with MySQL left outer join and differentiating query results from same key
我正在嘗試了解SQL聯接,並嘗試將它們應用於正在構建的應用程序。 我正在查詢以根據特定的游戲ID在時間表上查找“游戲記錄”。 但是在這個游戲記錄上; 用於“ h_team”和“ v_team”; 游戲記錄中只有團隊的ID。 因此,我想做的就是加入“團隊”表,並查找“ h_team”和“ v_team”的兩個不同的team_name。 由於只有分區ID存儲在游戲記錄中,因此我也使用聯接來引入“分區名稱”。 我已經做好了一切; 除了我不知道如何分別獲取h_team和v_team的“ team_name”的結果。 基本上,每個密鑰都是“ team_name”; 我將粘貼我的代碼,然后進一步解釋:
$array_game_id6=32;
$sql = "SELECT * FROM playoff_schedule LEFT OUTER JOIN teams on playoff_schedule.h_team = teams.team_id || playoff_schedule.v_team = teams.team_id LEFT OUTER JOIN playoff_divisions on playoff_schedule.po_div_id = playoff_divisions.po_div_id WHERE tom_game_id=$array_game_id6";
foreach ($dbh->query($sql) as $resultsg39)
{
$h_team=$resultsg39[h_team];
$v_team=$resultsg39[v_team];
$po_div_id=$resultsg39[po_div_id];
$round=$resultsg39[round];
$game_id=$resultsg39[game_id];
$date=$resultsg39[date];
$timestamp=$resultsg39[timestamp];
$h_score=$resultsg39[h_score];
$v_score=$resultsg39[v_score];
$tom_game_id=$resultsg39[tom_game_id];
$h_name=$resultsg39[team_name];
$div_name=$resultsg39[playoff_name];
}
當我嘗試獲取查詢結果並將它們全部存儲在不同的變量中時,問題就來了……
最后兩個“ $ h_name”和“ $ div_name”從JOIN中被拉出,所有先前的都在游戲記錄本身中…
我要做的是將“ v_team”和“ h_team”的名稱都存儲在各自的變量$ h_name和$ v_name中;
我有它存儲$ h_name沒問題; 但我不知道如何使其分別存儲$ h_name和$ v_name,因為它們都是“ teams”表中“ team_name”列中的值。 所以我只需要以某種方式做到這一點,以便當我得到結果時,它可以告訴兩個不同的“ team_names”之間的區別,並且可以將它們存儲在兩個不同的變量中……
如果不清楚,請告訴我。
謝謝!
*****更新時間:美國東部標准時間2015年2月5日10:49 pm取得了一些進展,但我的查詢無法正常工作; 我認為別名有問題,這是不對的。 這是我目前無法使用的查詢:
$sth = $dbh->prepare("SELECT home_team.team_name as home_team_name, visiting_team.team_name as visiting_team_name,
h_team, v_team, po_div_id, round, game_id, date, timestamp, h_score, v_score, tom_game_id, playoff_name FROM playoff_schedule
LEFT OUTER JOIN teams as home_team on playoff_schedule.h_team = teams.team_id
LEFT OUTER JOIN teams as visiting_team on playoff_schedule.v_team = teams.team_id
LEFT OUTER JOIN playoff_divisions on playoff_schedule.po_div_id = playoff_divisions.po_div_id
WHERE tom_game_id=$array_game_id6");
$sth->execute();
$article_list = $sth->fetchAll(PDO::FETCH_ASSOC);
foreach ($article_list as $row => $link) {
$h_team=$link['h_team'];
$v_team=$link['v_team'];
$po_div_id=$link['po_div_id'];
$round=$link['round'];
}
如果有人能發現我的新查詢有問題,我將不勝感激!
我認為您正在嘗試做的是:
select home_team.team_name as home_team_name,
visiting_team.team_name as visiting_team_name
from playoff_schedule
join team as home_team on playoff_schedule.h_team = teams.team_id
join team as visiting_team on playoff_schedule.v_team = teams.team_id
您可以根據需要多次加入同一張表。 在這種情況下,這很有意義,因為您實際上是在嘗試獲取兩個不同的信息。
根據您的上一次編輯,以下查詢似乎有效:
SELECT home_team.team_name AS home_team_name,
visiting_team.team_name AS visiting_team_name,
h_team,
v_team,
playoff_schedule.po_div_id,
round,
game_id,
date,
timestamp,
h_score,
v_score,
tom_game_id,
playoff_name
FROM playoff_schedule
LEFT OUTER JOIN teams AS home_team
ON playoff_schedule.h_team = home_team.team_id
LEFT OUTER JOIN teams AS visiting_team
ON playoff_schedule.v_team = visiting_team.team_id
LEFT OUTER JOIN playoff_divisions
ON playoff_schedule.po_div_id = playoff_divisions.po_div_id
WHERE tom_game_id=$array_game_id6
您可以在以下位置檢查查詢和架構: SQLFiddle
可能會發生的幾件事:
關於更新的查詢,我認為您缺少的主要內容是在JOIN條件中使用別名。 您應在整個查詢中保持表別名的一致性。 另外,IMO最好使表別名簡短,以便於閱讀:
因此,將這些內容應用於您的查詢:
SELECT h.team_name as h_team_name, v.team_name as v_team_name, s.h_team, s.v_team, s.po_div_id, s.round, s.game_id, s.date, s.timestamp, s.h_score, s.v_score, s.tom_game_id, s.playoff_name
FROM playoff_schedule s
LEFT OUTER JOIN teams h ON (
s.h_team = h.team_id
)
LEFT OUTER JOIN teams as v ON (
s.v_team = v.team_id
)
LEFT OUTER JOIN playoff_divisions d ON (
s.po_div_id = d.po_div_id
)
WHERE s.tom_game_id = ?
現在,我不確定您的模式是否100%正確,因此我可能已經將某些列引用到錯誤的表中,但是您應該可以對它們進行整理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.