2013-09-05 3 views
0

У меня есть эти две таблицы:MySQL - как присоединиться к таблице дважды с одной и той же таблицы

Главная:

id | name | hair_color | eye_color 
1 | a | 1   | 2 
2 | b | 1   | 3 
3 | c | 4   | 3 

Items:

id | name 
1 | black 
2 | blue 
3 | green 
4 | blonde 

Я хочу, чтобы выбрать одну строку из Главная таблица, но замените идентификаторы hair_color и eye_color по их имени, которое соответствует таблице Items.

Я имею в виду, для строки номер 1 в главной таблице, я хочу, чтобы получить это детали:

$res = array(
      id=>1, 
      name=>'a', 
      hair_color=>'black', 
      eye_color=>'blue'); 

Я попытался это неправильный запрос MySQL:

SELECT `main`.`id`, `main`.`name`, `items`.`name` as `hair_color`, `items`.`name` as `eye_color` 
FROM `main` 
LEFT JOIN `items` ON `main`.`hair_color` = `items`.`id 
LEFT JOIN `items` ON `main`.`eye_color` = `items`.`id 
WHERE `main`.`id` = 1 

Я знаю, что этот запрос неверен , но я не знаю, как это сделать правильно.

Любая идея?

Благодаря

EDIT:

Спасибо всем!

+0

выглядит Allright, просто дайте таблицам псевдоним (имя): 'LEFT JOIN элементов it1 ON main.color = it1.color' и то же для второго один, но назовите его it2 или что-то – Nanne

+0

Можете ли вы опубликовать схему? –

ответ

0

Вы были близки, но вам нужны псевдонимы.

Что-то вроде

SELECT `main`.`id`, 
     `main`.`name`, 
     h.`name` as `hair_color`, 
     e.`name` as `eye_color` 
FROM `main` 
LEFT JOIN `items` h ON `main`.`hair_color` = h.id 
LEFT JOIN `items` e ON `main`.`eye_color` = e.id 
WHERE `main`.`id` = 1 

SQL Fiddle DEMO

+0

Hooo ... Спасибо! – Nir

0

Вам просто нужно дать псевдонимы для ваших items таблиц:

SELECT `main`.`id`, `main`.`name`, 
     hi.`name` as `hair_color`, ei.`name` as `eye_color` 
FROM `main` 
LEFT JOIN `items` hi ON `main`.`hair_color` = hi.`id` 
LEFT JOIN `items` ei ON `main`.`eye_color` = ei.`id` 
+0

Hooo ... Спасибо! – Nir

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