2010-08-15 6 views
0

Ceci me trompe. J'essaie de tirer des méta-données sur les joueurs que j'ai comparés les uns aux autres dans un jeu. Par exemple: Joueur 22 contre Joueur 54Requête MySQL joignant les données de table

J'ai 2 tables mysql.

Tableau: joueurs (id, nom, image_url, etc.)

1 | John | john.jpg | etc
2 | George | george.jpg | etc
3 | Ian | ian.jpg | etc
4 | Steve | steve.jpg | etc

Tableau: confrontations (id, left_players_id, right_players_id)

1 | 1 | 3
2 | 2 | 4

Je souhaite afficher l'image et le nom du joueur de gauche ainsi que l'image et le nom du joueur sur ma page Web.

SELECT m.left_players_id, p.name AS left_player, m.right_players_id, p.name AS right_player des joueurs p, m matchups OÙ m.left_players_id = p.id ET m.right_players_id = p.id

0 résultats en raison du ET (nécessitant un match qui n'existe pas)

SELECT m.left_players_id, p.name AS left_player, m.right_players_id, p.name AS right_player des joueurs p, matchups m O WH m.left_players_id = p.id OU m.right_players_id = p.id

4 résultats (dupes de chaque ligne)

Que manque-t-il?

+0

Toutes les suggestions incroyablement rapides et pratiques (je pense). Ma prochaine question SO je ne dévie pas tellement de mes vrais noms de table ... J'ai eu du mal à convertir ces requêtes pour correspondre à ma configuration réelle. En fin de compte, j'ai Rob's au travail. Merci à vous trois! – darrenfauth

Répondre

1

Vous devez vous joindre à la table des joueurs deux fois, une fois pour chaque joueur.

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

Merci Rob. J'ai le vôtre pour travailler au mieux avec ma structure de table. – darrenfauth

0

Puisque vous faites référence à deux joueurs différents à la fois, la table du joueur est nécessaire à deux reprises, a rejoint sur la table Matchups pour définir la relation entre les joueurs gauche et à droite.

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

Merci mdma, j'apprécie votre aide. – darrenfauth

0

Vous ne devez pas sélectionner à partir de plusieurs tables de cette façon, vous devez utiliser INNER JOIN, comme ceci:

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; 

Ça va faire l'affaire.

+0

Merci GuidoH, j'apprécie votre aide! – darrenfauth

Questions connexes