Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Непонятки с sql_mode=ONLY_FULL_GROUP_BY

Anna | 31.05.2014 | нет комментариев

В мускуле есть режим ONLY_FULL_GROUP_BY, тот, что принуждает сервер понимать только те запросы с GROUP BY, в которых для группировки указываются все неагрегирующие поля, указанные в SELECT согласно эталону SQL. И хорошо, когда у меня есть запрос на связку таблиц, где я могу в GROUP BY разместить наименования колонок c функциональной зависимостью на ключи. Разместил туда GROUP BY 1,2,3,4,5,6..X и позабыл. А что делать с запросами, где я должен сделать группировку по полю каждого одной таблицы?

Выходит, есть таблица `dates`, свидания.

id   name            date
1    Жанна Фриске    2013-12-12
2    Жанна Фриске    2013-12-13
3    Надежда Брежнева   2013-12-14

Сейчас педалим два идентичных запроса. Один с пустым sql_mode, 2-й с ONLY_FULL_GROUP_BY:

SET @@sql_mode = "";
SELECT * FROM dates GROUP BY name;

SET @@sql_mode = "ONLY_FULL_GROUP_BY";
SELECT * FROM dates GROUP BY name;

В первом случае ожидаемый итог (мне неважно, что для Жанны выбралась запись с id=1, а не 2):

id   name            date
1    Жанна Фриске    2013-12-12
3    Надежда Брежнева   2013-12-14

А во втором — оплошность. SQL error 1055 dates.id is not in GROUP BY. Что разумно, потому что id неявным образом присутствует в SELECT’е. Ок, я добавлю в GROUP BY все имена колонок, что есть в SELECT. Но тогда в результате сервер мне вернет все строки из таблицы, что тоже разумно, но мне нафиг не нужно, так как группировки по имени так и не случилось. И порядок наименований полей здесь не играет роли. Вот тут у меня и появляется вопрос к общественности. Что мне делать в случае с такой легкой группировкой при выборке из одной таблицы? Как составить запрос по выборке группированых по имени данных из одной таблицы, Дабы он работал при различных sql_mode?

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB