SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 28.06.2018 23:27:32

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

Выручайте, странная ситуация.

Добрый день коллеги.

Столкнулся со странной штукой, прошу помочь.

Есть портал, работал на MySQL 5.5.25
Обновили на свою голову до MySQL 5.7.15
Заодно PHPMyAdmin до 4.6.4

Получил странный глюк, сложные запросы перестали работать. Например,

select e.id as memid, a.id as idvmn, a.name as vmnname, d.address, round(sum(c.donate),2) as vmndonate, round(f.cost, 2) as cost, round(((sum(c.donate))*100/f.cost),2) as ps
from vmn a, mn b, mnwc c, wallet d, members e,
(Select x.id, round(sum(y.cost),2) as cost from vmn x, mn y where (y.idvmn=x.id) group by x.id) as f
where (e.id=1)and(d.idmember=e.id)and(c.idwall=d.id)and(b.id=c.idmn)and(b.idcoin=1)and(a.id=b.idvmn)and(f.id=a.id) group by a.id;

Стали вываливать ошибки по крайней мере, когда пытаешься делать их в PHPMyAdmin.

Ошибки следующего характера.

Ошибка
Статический анализ:

Найдено 4 ошибок при анализе.

Ожидалось выражение. (near "(" at position 24)
Неожиданный токен. (near "(" at position 24)
This type of clause was previously parsed. (near "SELECT" at position 25)
Неожиданный токен. (near ")" at position 50)
SQL запрос: Документация

select AVG(a.name) from (SELECT a.coin FROM coin a)

Ответ MySQL: Документация

#1248 - Every derived table must have its own al

Не большой знаток скуля. Может подскажете.
До обновления все работало нормально.
И не совсем понятно, почему ругается на (Select...) в разделе FROM? Вроде всегда так можно было делать. В документации ничего вразумительного не нашел.

Заранее спасибо

Неактивен

 

#2 28.06.2018 23:42:05

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

Re: Выручайте, странная ситуация.

1-ый запрос

select e.id as memid, a.id as idvmn, a.name as vmnname, d.address, round(sum(c.donate),2) as vmndonate, round(f.cost, 2) as cost, round(((sum(c.donate))*100/f.cost),2) as ps
from vmn a, mn b, mnwc c, wallet d, members e,
(Select x.id, round(sum(y.cost),2) as cost from vmn x, mn y where (y.idvmn=x.id) group by x.id) as f
where (e.id=1)and(d.idmember=e.id)and(c.idwall=d.id)and(b.id=c.idmn)and(b.idcoin=1)and(a.id=b.idvmn)and(f.id=a.id) group by a.id;

может не работать, т.к. в 5.7 по умолчанию стоит режим ONLY_FULL_GROUP_BY, см подробней тут


2-ой запрос
select AVG(a.name) from (SELECT a.coin FROM coin a) -- тут должен быть алиас, т.е. as синоним


p.s. похоже вы пытаетесь выполнить в пхпадмине сразу несколько запросов

Неактивен

 

#3 28.06.2018 23:49:31

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

Re: Выручайте, странная ситуация.

Спасибо за быстрый ответ.

Уточню.

> 1-ый запрос может не работать, т.к. в 5.7 по умолчанию стоит режим ONLY_FULL_GROUP_BY, см подробней тут

ONLY_FULL_GROUP_BY отключается скриптом сразу после подключения к базе:
mysqli_query($db,'SET SQL_MODE="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"');


> 2-ой запрос
> select AVG(a.name) from (SELECT a.coin FROM coin a) -- тут должен быть алиас, т.е. as синоним
> p.s. похоже вы пытаетесь выполнить в пхпадмине сразу несколько запросов

Вы имеете в виду, что это ошибка ПХПАДМИНа? А почему старая версия позволяла такие вещи делать?
Да, там действительно подзапрос, но это же нормально?
Может настройки пхпадмина покрутить где надо?

С уважением.

Неактивен

 

#4 28.06.2018 23:56:41

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

Re: Выручайте, странная ситуация.

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

Ошибка
Статический анализ:

Найдено 2 ошибок при анализе.

Ожидалось выражение. (near "(" at position 223)
Неожиданный токен. (near "(" at position 223)
SQL запрос: Документация

select e.id as memid, a.id as idvmn, a.name as vmnname, d.address, round(sum(c.donate),2) as vmndonate, round(f.cost, 2) as cost, round(((sum(c.donate))*100/f.cost),2) as ps from vmn a, mn b, mnwc c, wallet d, members e, ( LIMIT 0, 25

Ответ MySQL: Документация

#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'LIMIT 0, 25' на строке 2


Но суть дела не сильно меняет. Как только встречает в разделе FROM (select...) as something
Сразу валит ошибки и останавливает действие.

Неактивен

 

#5 29.06.2018 00:00:45

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

Re: Выручайте, странная ситуация.

stark74 написал:

ONLY_FULL_GROUP_BY отключается скриптом сразу после подключения к базе:
mysqli_query($db,'SET SQL_MODE="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"');

это изменение в рамках сессии, в пхпадмин у вас другая сессия


stark74 написал:

Вы имеете в виду, что это ошибка ПХПАДМИНа? А почему старая версия позволяла такие вещи делать?
Да, там действительно подзапрос, но это же нормально?
Может настройки пхпадмина покрутить где надо?

вы привели запрос
select e.id as memid, ...
в котором нет
select AVG(a.name) from (SELECT a.coin FROM coin a)
так что к чему именно относится ошибка не ясно

просто выполнить запрос вида
select AVG(a.name) from (SELECT a.coin FROM coin a)
нельзя было и в старой версии

Неактивен

 

#6 29.06.2018 00:06:52

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

Re: Выручайте, странная ситуация.

stark74 написал:

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

Ошибка
Статический анализ:

Найдено 2 ошибок при анализе.

Ожидалось выражение. (near "(" at position 223)
Неожиданный токен. (near "(" at position 223)
SQL запрос: Документация

select e.id as memid, a.id as idvmn, a.name as vmnname, d.address, round(sum(c.donate),2) as vmndonate, round(f.cost, 2) as cost, round(((sum(c.donate))*100/f.cost),2) as ps from vmn a, mn b, mnwc c, wallet d, members e, ( LIMIT 0, 25

Ответ MySQL: Документация

#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'LIMIT 0, 25' на строке 2


Но суть дела не сильно меняет. Как только встречает в разделе FROM (select...) as something
Сразу валит ошибки и останавливает действие.

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

select e.id as memid, a.id as idvmn, a.name as vmnname, d.address, round(sum(c.donate),2) as vmndonate, round(f.cost, 2) as cost, round(((sum(c.donate))*100/f.cost),2) as ps from vmn a, mn b, mnwc c, wallet d, members e, ( LIMIT 0, 25

который синтаксически неверный и отличается от первого
select e.id as memid, a.id as idvmn, a.name as vmnname, d.address, round(sum(c.donate),2) as vmndonate, round(f.cost, 2) as cost, round(((sum(c.donate))*100/f.cost),2) as ps
from vmn a, mn b, mnwc c, wallet d, members e,
(Select x.id, round(sum(y.cost),2) as cost from vmn x, mn y where (y.idvmn=x.id) group by x.id) as f
where (e.id=1)and(d.idmember=e.id)and(c.idwall=d.id)and(b.id=c.idmn)and(b.idcoin=1)and(a.id=b.idvmn)and(f.id=a.id) group by a.id;

возможно глючит пхпадмин

Неактивен

 

#7 29.06.2018 15:22:15

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

Re: Выручайте, странная ситуация.

Итак, некоторый промежуточный итог.

Отдельное спасибо vasya!

На локальном компьютере установлено обновление для Denwer

Сервер баз данных
------------------------
Сервер: 127.0.0.1 via TCP/IP
Тип сервера: MySQL
Версия сервера: 5.7.15 - MySQL Community Server (GPL)
Версия протокола: 10

Веб-сервер
---------------
Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.10
Версия клиента базы данных: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $
PHP расширение: mysqliДокументация curlДокументация mbstringДокументация
Версия PHP: 7.0.10

phpMyAdmin
----------------
Информация о версии: 4.6.4


И похоже phpMyAdmin безбожно глючит при попытке выполнить в окне SQL запрос чуть посложнее Select * from table.
Например, при попытке в качестве источника в секции FROM выражение Select, то есть
SELECT a, b, c, ....
FROM table1, table2, (SELECT masterid FROM Table) (as) table3

Выдает кучу ошибок:

Ошибка
Статический анализ:

Найдено 2 ошибок при анализе.

Ожидалось выражение. (near "(" at position 140)
Неожиданный токен. (near "(" at position 140)

Формируя итоговый запрос неверно вставляя вместо вложенного select строку типа ( LIMIT 0, 25

Грешу именно на phpMyAdmin, так как запросы отлично работают в ПХП.

Немного помогает отключение "Игнорировать ошибки составных запросов" в "Настройки, касающиеся страницы" SQL запроса. Хотя бы дает исполнять код. Но чуть только запрос посложнее, либо вы получите 0 записей, либо ое же ошибки.

Если кто-нибудь подскажет мне, что я не верно делаю, буду благодарен. Отладкой запросов все-таки очень удобно заниматься в PHPMyAdmin.

С уважением.

Неактивен

 

#8 30.06.2018 00:45:12

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

Re: Выручайте, странная ситуация.

PHPMyAdmin довольно глючная штука и лучше его не использовать.
Попробуйте Workbench от MySQL

Неактивен

 

Board footer

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