2010-08-15 115 views
0

這是躲避我。我正在嘗試提取關於我在遊戲中相互匹配的玩家的元數據。例如:玩家22 vs.玩家54MySQL查詢加入表數據

我有2個mysql表。

表格:玩家(id,name,image_url等)

1 |約翰| john.jpg | etc
2 |喬治| george.jpg |等
3 |伊恩| ian.jpg |等
4 |史蒂夫| steve.jpg |等

表:對決(ID,left_players_id,right_players_id)

1 | 1 | 3
2 | 2 | 4

我想顯示我的網頁上留下的球員形象,名稱和正確的玩家形象和名稱。

SELECT m.left_players_id,p.name AS left_player,m.right_players_id,p.name AS right_player FROM玩家P,對決米 WHERE m.left_players_id = p.id AND m.right_players_id = p.id

由於

0的結果和(需要不存在匹配)

SELECT m.left_players_id,p.name AS left_player,m.right_players_id,p.name AS right_player FROM玩家p,對決米 WHERE m.left_players_id = p.id OR m.right_players_id = p.id

4結果(每行的模糊)

我錯過了什麼?

+0

所有驚人的快速和可行的建議(我認爲)。我的下一個SO問題我不會偏離真正的表名......我很難轉換這些查詢以匹配我的實際設置。最終,我得到了Rob的工作。感謝你們三位! – darrenfauth 2010-08-16 00:19:04

回答

1

您需要加入玩家表兩次,每個玩家一次。

SELECT m.left_players_id, l.name AS left_player, m.right_players_id, r.name AS right_player 
FROM players r, payers l, matchups m 
WHERE m.left_players_id = l.id AND m.right_players_id = r.id 
+0

感謝羅布。我有你的工作與我的表結構最好。 – darrenfauth 2010-08-16 00:19:29

0

由於您一次指的是兩個不同的玩家,玩家表需要兩次,在Matchups表上加入以定義左右玩家之間的關係。

SELECT l.name, l.image_url, r.name, r.image_url 
FROM Players l 
INNER JOIN matchups m ON l.id=m.left_players_id 
INNER JOIN Players r ON r.id=m.right_players_id 
+0

感謝mdma,感謝您的幫助。 – darrenfauth 2010-08-16 00:19:54

0

你不應該從多個表這種方式,你應該使用INNER JOIN,這樣的選擇:

SELECT lp.name left_name, rp.name right_name 
FROM matchups m 
INNER JOIN players lp ON lp.id = m.left_players_id 
INNER JOIN players rp ON rp.id = m.right_players_id; 

那會做的伎倆。

+0

感謝GuidoH,感謝您的幫助! – darrenfauth 2010-08-16 00:20:10