Связь двух таблиц дважды в одном запросе

Эдди

Новичок
Связь двух таблиц дважды в одном запросе

Есть таблица вылетов авиарейсов t1.
В ней, в частности, два столбца:
t1.depart_id - аэропорт вылета
t1.dest_id - аэропорт прилета

Есть вторая таблица аэропортов t2,
в которой содержатся названия аэропортов.
t2.airport_id

И выходит, что в одном запросе я могу получить название или только аэропорта вылета,
или только аэропорта прилета.

SELECT `airport` FROM t1,t2 WHERE t1.depart_id=airports.airport_id AND ...

Два раза связать, видно, нельзя

SELECT `airport` FROM t1,t2 WHERE t1.depart_id=airports.airport_id AND t1.deые_id=airports.airport_id AND ...

Как же быть? Оставить два практически одинаковых запроса?
 

x-yuri

Новичок
Код:
FROM t2 t_1 
    JOIN t1 t_2 ON t_1.airport_id=t_2.depart_id
    JOIN t2 t_3 ON t_2.dest_id=t_3.airport_id
 

Эдди

Новичок
Автор оригинала: x-yuri
Код:
FROM t2 t_1 
    JOIN t1 t_2 ON t_1.airport_id=t_2.depart_id
    JOIN t2 t_3 ON t_2.dest_id=t_3.airport_id
Спасибо. Хотя с синтаксисом пришлось повозиться.
ПОлучилось вот что

SELECT *
FROM order_avia, avia_arrivals, cities, flights
JOIN airports AS ap_depart ON flights.depart_id = ap_depart.airport_id
JOIN airports AS ap_dest ON flights.dest_id = ap_dest.airport_id

WHERE order_avia.avia_arvl_id = avia_arrivals.avia_arvl_id
AND avia_arrivals.flight_id = flights.flight_id
AND ap_depart.city_id = cities.city_id
AND order_avia.inout = "in"
AND order_id =7

Но осталась еще одна загвоздка.
Аэропорты вылета и прилета, в свою очередь, связаны с третьей таблицей - Города (cities).
Мне надо получить и названия городов вылета и прилета.

Если я добавляю в WHERE
ap_depart.city_id=cities.city_id
все нормально.
Город вылета получил.

Но если добавляю и
ap_dest.city_id=cities.city_id
получаю пустой результат

Тоже JOIN надо использовать (но как?)
 

x-yuri

Новичок
а так не работает (без городов)?
Код:
SELECT * 
FROM order_avia
JOIN avia_arrivals ON order_avia.avia_arvl_id = avia_arrivals.avia_arvl_id
JOIN flights avia_arrivals.flight_id = flights.flight_id
JOIN airports AS ap_depart ON flights.depart_id = ap_depart.airport_id
JOIN airports AS ap_dest ON flights.dest_id = ap_dest.airport_id
WHERE order_avia.inout = "in"
AND order_id =7
Мне надо получить и названия городов вылета и прилета.
та же система, join'ить две таблицы cities
 

Эдди

Новичок
Автор оригинала: x-yuri
а так не работает (без городов)?
И так работает, спасибо! Только ON ты пропустил в одном месте.

В общем с городами получилось следующее:

PHP:
SELECT * 
FROM order_avia
JOIN avia_arrivals ON order_avia.avia_arvl_id = avia_arrivals.avia_arvl_id
JOIN flights ON avia_arrivals.flight_id = flights.flight_id
JOIN airports AS ap_depart ON flights.depart_id = ap_depart.airport_id
JOIN airports AS ap_dest ON flights.dest_id = ap_dest.airport_id

JOIN cities ON cities.city_id = ap_depart.city_id

WHERE order_avia.inout = "in"
AND order_id =7
Одно странно. джойню таблицу города только с эропортом вылета.
А получаю и ап вылета, и ап прилета.
Второй джойн только дублирует записи.

Ну да ладно. Работает отлично!!!
Спасибо...
 

x-yuri

Новичок
Одно странно. джойню таблицу города только с эропортом вылета.
А получаю и ап вылета, и ап прилета.
Второй джойн только дублирует записи
либо странно, либо ты чего-то не того ожидаешь от запроса
при двух джойнах поля таблицы cities должны быть в двух экземплярах - для вылетов и для прибытий
а дублируются записи, а не столбцы?
 

Эдди

Новичок
Автор оригинала: x-yuri
либо странно, либо ты чего-то не того ожидаешь от запроса
при двух джойнах поля таблицы cities должны быть в двух экземплярах - для вылетов и для прибытий
а дублируются записи, а не столбцы?
Я был неправ. Второй джойн конечно же нужен.
ВОт конечный запрос, который уже супер работает в скрипте:
SELECT
`total`,
`commis`,
`pay`,
`flight`,
`departure`,
`arrival`,
`num_avia`,
ap_depart.airport AS ap_dep,
ap_dest.airport AS ap_des,
city_depart.city AS cit_dep,
city_dest.city AS cit_des
FROM
`order_avia`
JOIN `avia_arrivals` ON order_avia.avia_arvl_id=avia_arrivals.avia_arvl_id
JOIN `flights` ON avia_arrivals.flight_id=flights.flight_id
JOIN `airports` AS ap_depart ON flights.depart_id=ap_depart.airport_id
JOIN `airports` AS ap_dest ON flights.dest_id=ap_dest.airport_id
JOIN `cities` AS city_depart ON city_depart.city_id=ap_depart.city_id
JOIN `cities` AS city_dest ON city_dest.city_id=ap_dest.city_id
WHERE
order_avia.inout="in" AND
`order_id`='.$order_id;
 
Сверху