Помогите разобраться с sql запросом из 5 таблиц

A
На сайте с 09.01.2013
Offline
33
1033

Помогите разобраться с sql запросом из 5 таблиц:

Делаю Вот такой запрос:

SELECT 


transport.id_t,
transport.marka,
transport.gos_number,
transport.mesta,
transport.description,
transport.sorted,

lines.id_line,
lines.trans,

line_city_otpr.id_lco,
line_city_otpr.id_line,
line_city_otpr.id_city,

line_city_prib.id_lcp,
line_city_prib.id_line,
line_city_prib.id_city,

city.id_city,
city.city

FROM `lines`

INNER JOIN `transport`
ON lines.trans=transport.id_t

INNER JOIN `line_city_otpr`
ON lines.id_line=line_city_otpr.id_line

INNER JOIN `line_city_prib`
ON lines.id_line=line_city_prib.id_line

INNER JOIN `city`
ON line_city_otpr.id_city=city.id_city

INNER JOIN `city`
ON line_city_prib.id_city=city.id_city

Ошибка: #1066 - Not unique table/alias: 'city'

Не понимаю, как по другому составить запрос, а так же не понятно, что за ошибка.

Заранее спасибо господа.

olympteka
На сайте с 08.06.2013
Offline
16
#1
antyan:
Помогите разобраться с sql запросом из 5 таблиц:

Делаю Вот такой запрос:

...

Ошибка: #1066 - Not unique table/alias: 'city'

Не понимаю, как по другому составить запрос, а так же не понятно, что за ошибка.

Заранее спасибо господа.

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

line_city_otpr.id_city AS id_city1,

line_city_prib.id_city AS id_city2,

city.id_city AS id_city3,

и в результатах выборки обращаётесь через эти алиасы (echo $row['id_city1'] как пример)

Что касается city (таблицы), также используйте алиасы INNER JOIN `city` AS c1, например. Естественно, этот алиас и должен использоваться в условиях

Общем, как-то так

SELECT 

transport.id_t,
transport.marka,
transport.gos_number,
transport.mesta,
transport.description,
transport.sorted,

lines.id_line AS id_line1,
lines.trans,

line_city_otpr.id_lco,
line_city_otpr.id_line AS id_line2,
line_city_otpr.id_city AS id_city1,

line_city_prib.id_lcp,
line_city_prib.id_line AS id_line3,
line_city_prib.id_city AS id_city2,

city.id_city AS id_city3,
city.city

FROM `lines`

INNER JOIN `transport`
ON lines.trans=transport.id_t

INNER JOIN `line_city_otpr`
ON lines.id_line=line_city_otpr.id_line

INNER JOIN `line_city_prib`
ON lines.id_line=line_city_prib.id_line

INNER JOIN `city`
ON line_city_otpr.id_city=city.id_city

INNER JOIN `city` AS c2
ON line_city_prib.id_city=c2.id_city

А вообще у Вас id_line и id_city одни и теже (вы по ним джойните) - так зачем их тянуть по три штуки, поэтому SELECT я бы сделал так:

SELECT 

transport.id_t,
transport.marka,
transport.gos_number,
transport.mesta,
transport.description,
transport.sorted,

lines.id_line,
lines.trans,

line_city_otpr.id_lco,
line_city_otpr.id_city,

line_city_prib.id_lcp,

city.city
A
На сайте с 09.01.2013
Offline
33
#2

olympteka, но не могу получить второе имя города, т.е. есть город прибытия и город отправления, по id_city с city вытягиваем имена городов.

olympteka
На сайте с 08.06.2013
Offline
16
#3
antyan:
olympteka, но не могу получить второе имя города, т.е. есть город прибытия и город отправления, по id_city с city вытягиваем имена городов.

Трудно оценивать запрос из пяти тадлиц, не видя таблиц и их взаимосвязей.

Что касается городов, то в SELECT значит таблица city должна фигурировать дважды, например так


city.city AS city1,
c2.city AS city2

исходя из


INNER JOIN `city` ON line_city_otpr.id_city=city.id_city
INNER JOIN `city` AS c2 ON line_city_prib.id_city=c2.id_city

В таком случае у Вас и разные id_city (ночью не разобрался), тогда пробуйте так


SELECT

transport.id_t,
transport.marka,
transport.gos_number,
transport.mesta,
transport.description,
transport.sorted,

lines.id_line,
lines.trans,

line_city_otpr.id_lco,
line_city_otpr.id_city AS id_city1,

line_city_prib.id_lcp,
line_city_prib.id_city AS id_city2,

c1.city AS city1,
c2.city AS city2

FROM `lines`

INNER JOIN `transport` ON lines.trans=transport.id_t
INNER JOIN `line_city_otpr` ON lines.id_line=line_city_otpr.id_line
INNER JOIN `line_city_prib ON lines.id_line=line_city_prib.id_line
INNER JOIN `city`AS c1 ON line_city_otpr.id_city=c1.id_city
INNER JOIN `city` AS c2 ON line_city_prib.id_city=c2.id_city
A
На сайте с 09.01.2013
Offline
33
#4

olympteka, большое Вам спасибо, за отличное разъяснение.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий