0

Господа, доброго дня всем

SELECT
    `p`.`id`,
    `p`.`price`*`settings`.`value` as `price_sell`
FROM                                                               
    `table1` as `p`
INNER JOIN 
    `table2` as `pt` ON `p`.`id`=`pt`.`id_product`     
INNER JOIN 
    `table3` as `settings`                  
WHERE 1 AND `settings`.`key`='delimiter'
GROUP BY `p`.`id`
ORDER BY `p`.`param1` DESC, `p`.`param2` ASC
LIMIT 0,10

В общем есть такой запрос. Локально на MySQL 5.7 выполняется на ура. На хостинге - проблема

Ошибка в запросe (1055):
Expression #7 of SELECT list is not in GROUP BY
clause and contains nonaggregated column 'mybd.settings.value'
which is not functionally dependent on columns in GROUP BY clause;

this is incompatible with sql_mode=only_full_group_by

Тут 2 пути, переделать запрос, или понять почему на хостинге запрос не идет, а локально работает. Прошу подскажите решение, что лучше предпринять. есть ли настройка MySQL которая может отличаться, или придется запрос переписывать? и если дело касается запроса, то как переписать?

gforce
  • 426
  • 6
  • 13
  • В списке выборки не должно быть голых колонок, не перечисленных в group by, необходимо явно задавать какое значение из нескольких возможных должно быть показано, т.е. указывать функции min/max/avg и т.п. https://ru.stackoverflow.com/a/599802/194569 В вашем случае все колонки таблицы p, используемые в списке выборки и order by можно указать в group by, так как они все равно уникальны. по колонкам других таблиц надо принимать решение по каждой какое же значение вы хотите брать – Mike Apr 11 '18 at 09:19
  • GROUP BY p.id, settings.id - второй параметр, помогло, спс! Прошу, пост в ответы, надо за акцептить, может кому пригодиться решение – gforce Apr 11 '18 at 09:23
  • А вы уверены, что settings.id можно добавлять в group by ? т.е. вы уверены, что на один p.id приходится гарантированно не более одного settings.id ? Если так, то не совсем понятно, зачем вообще нужен group by – Mike Apr 11 '18 at 09:28
  • Уберите GROUP BY - оно совершенно бессмысленно, поскольку нет групповых функций, но добавьте DISTINCT. Если оно вообще надо - уж больно p.id на первичный индекс походит... – Akina Apr 11 '18 at 09:28
  • GROUP BY надо. я там в запросе указал table2! из за него там дубли в ID. в settings у меня есть и другие параметры, left JOIN выбирает определенный, по моему ключику = delimiter. я только не понял почему локально ошибки не было, а на хосте появилась – gforce Apr 11 '18 at 09:30

0 Answers0