2010-08-15 3 views
0

Это ускользает от меня. Я пытаюсь вытащить метаданные о игроках, которые я сопоставил друг с другом в игре. Например: Игрок 22 против игрока 54Данные о соединении запросов MySQL MySQL

У меня есть 2 таблицы mysql.

Таблица: игроки (идентификатор, имя, IMAGE_URL и т.д.)

1 | Джон | john.jpg | и т. д.
2 | Джордж | george.jpg | и т. д.
3 | Ян | ian.jpg | и т.д.
4 | Стив | steve.jpg | и т.д.

Таблица: матчи (ID, left_players_id, right_players_id)

1 | 1 | 3
2 | 2 | 4

Я хочу отобразить изображение и имя левого игрока, а также правильное изображение и имя игрока на моей веб-странице.

ВЫБОР m.left_players_id, p.name А.С. left_player, m.right_players_id, p.name КАК right_player от игроков р, м матчей Где m.left_players_id = p.id И m.right_players_id = p.id

0 результаты из-за И (требующий матч, который не существует)

ВЫБОР m.left_players_id, p.name AS left_player, m.right_players_id, p.name А.С. right_player от игроков р, м матчей WHERE m.left_players_id = p.id OR m.right_players_id = p.id

4 результата (обман каждого ряда)

Что мне не хватает?

+0

Все удивительно быстрые и работоспособные предложения (я думаю). Мой следующий вопрос SO я не буду так сильно отклоняться от своих реальных имен таблиц ... Мне было сложно преобразовать эти запросы в соответствии с моей фактической настройкой. В конечном счете, я заставил Робу работать. Спасибо всем троим! – darrenfauth

ответ

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

0

Поскольку вы имеете в виду двух разных игроков одновременно, таблица игрока дважды необходимо, присоединился на столе матчапах определить соотношение между левым и правым игроками.

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

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

Смежные вопросы