Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день коллеги.
Столкнулся со странной штукой, прошу помочь.
Есть портал, работал на 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? Вроде всегда так можно было делать. В документации ничего вразумительного не нашел.
Заранее спасибо
Неактивен
1-ый запрос
Неактивен
Спасибо за быстрый ответ.
Уточню.
> 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. похоже вы пытаетесь выполнить в пхпадмине сразу несколько запросов
Вы имеете в виду, что это ошибка ПХПАДМИНа? А почему старая версия позволяла такие вещи делать?
Да, там действительно подзапрос, но это же нормально?
Может настройки пхпадмина покрутить где надо?
С уважением.
Неактивен
Извиняюсь. Скопировал не то сообщение об ошибке для первого запроса. Ночь уже.
Ошибка
Статический анализ:
Найдено 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
Сразу валит ошибки и останавливает действие.
Неактивен
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)
нельзя было и в старой версии
Неактивен
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
Сразу валит ошибки и останавливает действие.
судя по ошибке вы пытаетесь выполнить запрос
Неактивен
Итак, некоторый промежуточный итог.
Отдельное спасибо 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.
С уважением.
Неактивен