2016-05-16 3 views
1

У меня есть место, где хранятся страны, провинции и города. Я хочу, когда поиск города по его id; Я тоже вижу его провинцию и страну! Я пробовал слишком много, но я действительно не знаю, какой именно запрос мне нужно написать.Как объединить три таблицы вместе в MySQL?

Мое имя таблицы расположение и это мои поля с примерными данными:

id    enName   localName type  in_location 
1    Iran    ایران country   0 
2    Fars    فارس  province   1 
3    shiraz   شیراز  city    2 
4    marvdasht  مرو دشت city   2 

Я хочу при поиске ID = 3 получить этот результат:

страна/область/город

Иран/Фарс/Шираз

Как я могу писать e этот запрос? Я знаю, что я должен присоединиться к столу 3 раза, но не знаю, как это сделать.

Код я пробовал:

SELECT 
    in_location , 
    enName 
FROM 
    location 
WHERE 
    id = 12321 as a 
INNER JOIN 
    SELECT 
     * 
    FROM 
     `fzxit_location` as b 
    on a.in_location = b.id 
+1

Mysql не имеет никакой функциональности, чтобы сделать иерархический запрос. Вы можете достичь этого, однако, если уровень иерархии предопределен. Более простой способ - написать рекурсивную функцию на PHP для достижения того, что вы пытаетесь сделать. –

+1

Ваш запрос поражает цель реляционных баз данных, строки в одной таблице не должны быть напрямую связаны. – zoubida13

+0

Почему вы пытаетесь подключиться к одной таблице? – NuttLoose

ответ

3

ГДЕ Постулаты всегда должны прийти в конце. Я думаю, что это то, что вы ищете. Вы будете исправлены для отношений с 3 детьми или меньше, хотя.

SELECT a.enName, b.enName, c.enName FROM location as a 
LEFT JOIN location as b ON a.in_location = b.id 
LEFT JOIN location as c ON b.in_location = c.id 
WHERE a.id = 3 
+0

Вы на 30 секунд быстрее :) – smozgur

+0

thankyou Frederico, именно то, что я хотел :))) – Saeid

0

этот запрос может вам помочь!

select from p.province_name, 
      ct.country_name, 
      c.city_name 
from city as c 
    INNER JOIN provinces as p ON c.province_id=p.province_id 
    INNER JOIN countries as ct ON c.country_id = ct.country_id 
where c.city_id = "requested value"; 
+0

Когда вы хорошо отделились для чтения, ваша ошибка становится совершенно очевидной – RiggsFolly

1

Хотя вы не указали другое имя таблиц, вы можете попробовать это ..

select a.countryName, 
     b.proviceName, 
     c.cityName 
from ((country a 
     left join province b on a.countryId = b.countryId) 
     left join city c on a.countryId = c.countryId) 
where id = 3; 
Смежные вопросы