SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.01.2008 20:19:36

KOM_29
Участник
Зарегистрирован: 24.01.2008
Сообщений: 5

Разница выполнения запросов

Помогите, разобраться в какую сторону рыть?

запрос на локоли выполняется без проблем
на системе денвер

выдает: не существует колонка
а на хостинге не выполняется

вот сам запрос


SELECT regions.name as regions, variantid, streets.name as streets, zone.name as zone,
moneyid.name as moneyid, santech.name as santech,
listid, fvalue, ftype,  listparam_base.namebase_l, listparam_base.name as `name_param`
FROM v_enumtest,listparam_base
LEFT JOIN regions ON (v_enumtest.fvalue=regions.id and listid=2 )
LEFT JOIN streets ON v_enumtest.fvalue=streets.id and listid=3
LEFT JOIN zone ON (v_enumtest.fvalue=zone.id and listid=4 )
LEFT JOIN moneyid ON (v_enumtest.fvalue=moneyid.id and listid=33 )
LEFT JOIN santech ON (v_enumtest.fvalue=santech.id and listid=76 )
where v_enumtest.listid=listparam_base.id
and variantid in (518, 916, 1690, 2288, 2561, 2650, 2664, 2895, 2903, 2959, 3233, 3364, 3417, 3428, 3430)
and listid in (2,0,3,4,33,76,104,106,111,136,155)

Неактивен

 

#2 24.01.2008 20:34:07

_Lok_
Участник
Зарегистрирован: 24.01.2008
Сообщений: 4

Re: Разница выполнения запросов

попробуй regions.name as regions и другие as заменить отличными словами, например: regions.name as reg
(regions - это таблица у тебя?)

возможно на локе и на серве спользуются разнве версии мускла вот и ругается..

Неактивен

 

#3 24.01.2008 20:42:53

KOM_29
Участник
Зарегистрирован: 24.01.2008
Сообщений: 5

Re: Разница выполнения запросов

да regions это таблица

но он ругается на отсутсвии поля fvalue  из базы v_enumtest

хотя она там есть если запросить SELECT * FROM v_enumtest

самое смешное что запрос работает на локале ан сервере в инете нет

Отредактированно KOM_29 (24.01.2008 20:43:26)

Неактивен

 

#4 24.01.2008 21:44:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3873

Re: Разница выполнения запросов

сравните SHOW CREATE TABVLE v_emuntest на локалхосте и на сервере

Неактивен

 

#5 24.01.2008 22:06:29

KOM_29
Участник
Зарегистрирован: 24.01.2008
Сообщений: 5

Re: Разница выполнения запросов

идентичны

Неактивен

 

#6 25.01.2008 00:44:55

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3873

Re: Разница выполнения запросов

попробуйте
SELECT fvalue FROM v_enumtest

Неактивен

 

#7 25.01.2008 12:07:20

KOM_29
Участник
Зарегистрирован: 24.01.2008
Сообщений: 5

Re: Разница выполнения запросов

так работает и показывает значения
и на локали работает

Неактивен

 

#8 25.01.2008 13:36:45

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3873

Re: Разница выполнения запросов

попробуйте сокращать запрос и довести его до наикратчайшего неработающего

Неактивен

 

#9 25.01.2008 19:12:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6739

Re: Разница выполнения запросов

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

Например, Ваши выражения внутри JOIN вводят меня в ступор. Возможно, сервер
умнее, но я бы на его месте обиделся smile

P.S. Хотя, известно, что старые версии MySQL к этому относились лояльно.

Неактивен

 

#10 26.01.2008 02:14:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5777

Re: Разница выполнения запросов

SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);

На ранних версиях MySQL такая конструкция работает, так как подразумевает неявную группировку - t1, t2 аналогично (t1, t2). Начиная с версии 5.0.12 оператор JOIN имеет приоритет, поэтому оператор ON действует на таблицы t2 и t3. Так как t1.i1 не принадлежит ни одной из объединяемых таблиц, то возникает ошибка Unknown column 't1.i1' in 'on clause'.

Для корректной работы нужно явно указать последовательность объединения с помощью круглых скобок:
SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);
или переписать выражение через JOIN
SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson