трабла с запросом

Kirill

Новичок
трабла с запросом

SQL:
PHP:
SELECT
	t1.flat_id, t2.flat_id, flat_home, flat_rooms, flat_we_recommend, flat_floor, flat_currency, flat_city, flat_cat, flat_peshkom, flat_peoples, flat_eatlas, t2.flat_street, t2.flat_description, t2.flat_metro, MIN(t3.pr_price_from) AS minprice, MAX(t3.pr_price_to) AS maxprice
FROM
	ah_flats t1, ah_flats_ger t2
	LEFT JOIN ah_price2 t3 ON t3.pr_hid=t1.flat_id
WHERE
	t2.flat_id=t1.flat_id
	AND flat_type=5
	AND flat_step2=1
	AND flat_step3=1
	AND flat_step4=1
	AND flat_step5=1
	AND flat_city=0
GROUP BY t1.flat_id
ORDER BY flat_we_recommend DESC, t2.flat_street, flat_home
LIMIT 0,10
Ошибка Unknown column 't1.flat_id' in 'on clause'

Хотя в таблице ah_flats поле flat_id существует.

Помогите в чем проблема - туплю...
 

Gas

может по одной?
Previously, the comma operator (,) and JOIN both had the same precedence, so the join expression t1, t2 JOIN t3 was interpreted as ((t1, t2) JOIN t3). Now JOIN has higher precedence, so the expression is interpreted as (t1, (t2 JOIN t3)). This change affects statements that use an ON clause, because that clause can refer only to columns in the operands of the join, and the change in precedence changes interpretation of what those operands are.
говорится о версиях mysql > 5.0.12, раздел Join Processing Changes in MySQL 5.0.12
 

berkut

Новичок
вот так срань... мучас грасиас гас. только поясни плиз нелегалу:
This change affects statements that use an ON clause, because that clause can refer only to columns in the operands of the join
Код:
FROM t1
    INNER JOIN t2 ON t1.id = t2.t1_id
    INNER JOIN t3 ON t1.id = t3.t1_id
вопрос в последнем джоине: t3 ON t1.id = t3.t1_id в мускл5 нельзя обращаться из второго джоина к первой таблице?
 

Breeze

goshogun
Команда форума
Партнер клуба
berkut

в твоей нотации -- можно..

это изменение касается именно вида t1,t2 JOIN t3
т.е. они приоритет объединения поменяли, как я понял из буржуйского, t1 рассматривается только после джоина t2 c t3
 

berkut

Новичок
смущает фраза: affects statements that use an ON clause, because that clause can refer only to columns in the operands of the join
 

Breeze

goshogun
Команда форума
Партнер клуба
berkut

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

а в том -- ему надо сделать джоин по ON и только потом по where соединить с t1

апд: на 5.0.45 проверено
 

Gas

может по одной?
berkut
это говорит о том, что теперь нельзя написать что-то вроде
[SQL]
FROM t1
INNER JOIN t2 ON t2.id = t3.t1_id
INNER JOIN t3 ON t3.t1_id = t1.id
[/SQL]
и правильно, а до 5.0.12 можно было.
 

berkut

Новичок
Gas это несколько другое.
INNER JOIN t2 ON t2.id = t3.t1_id INNER JOIN t3 ON t3.t1_id = t1.id
и
INNER JOIN t2 ON t2.id = t1.t1_id INNER JOIN t3 ON t3.t1_id = t1.id
 

Gas

может по одной?
то что запросы не равнозначны по смыслу это не важно, я говорю о том что в первом запросе mysql 5.0.12 выдаст ошибку, так как в первом ON идёт ссылка на t3 таблицу, которая ещё не была определена, но в версиях до 5.0.12 он будет работать (повторюсь, я не сравниваю смысл запросов и по каким полям происходят джойны).
 
Сверху