Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/120: Рейтинг темы: голосов - 120, средняя оценка - 4.98
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
1
MySQL

Ошибка: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ''...

02.06.2018, 18:56. Показов 22284. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь сделать выборку из таблицы следующим образом

PHP
1
$r=$mysqli->query("SELECT * FROM `test` GROUP BY `session`");
`session` ( VARCHAR(32))- это сессия переписки, то есть чтобы не доставать все переписки, достаются только по одной последней. Но вот проблема, выдаёт ошибку

HTML5
1
#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Подскажите в чём может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2018, 18:56
Ответы с готовыми решениями:

User Warning: Query Error:In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated colu
Добрый вечер! Получаю такую ошибку: User Warning: Query Error:In aggregated query without GROUP...

Mixing of GROUP columns (MIN(),MAX(),COUNT(),.) with no GROUP columns is illegal if there is no GROUP BY clause
Такая ошибка: КОД: $result=mysql_query("SELECT description, min(schedule.date) as...

Поиск. Ошибка Unknown column 'familia' in 'where clause'
Доброго времени суток, помогите решить следующую проблему Захотел сделать кнопку поиска по базе,...

Произошла ошибка: Unknown column 'login' in 'where clause'
Хочу реализовать вход в учётную запись по логину и паролю, выдаёт ошибку Произошла ошибка: Unknown...

9
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
02.06.2018, 19:05 2
Собственно в тексте сообщения об ошибке все написано. Для выборок, использующих GROUP BY следует указывать в списке результирующих столбцов либо столбцы указанные в секции GROUP BY, либо использовать аггрегирующие функции. Иначе для таблицы t вида
ab
11
21
32
42
В запросе
SQL
1
SELECT a, b FROM t GROUP BY b
не понятно что в результирующей выборке указывать в качестве столбца a
ab
11
32
или
21
42
или
21
32
0
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.06.2018, 20:50  [ТС] 3
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Собственно в тексте сообщения об ошибке все написано. Для выборок, использующих GROUP BY следует указывать в списке результирующих столбцов либо столбцы указанные в секции GROUP BY, либо использовать аггрегирующие функции. Иначе для таблицы t вида
Не совсем понял, я думал что должно выбирать по одной записи, уникального значения указанного столбца, как я понимал исходя упорядоченности ...
То есть
PHP
1
$r=$mysqli->query("SELECT `id`,`session`,`message` FROM `test` WHERE `id`!=0 GROUP BY `session`");
а в таблице записи к примеру
HTML5
1
2
3
4
5
6
id   session   message
1    rrreee     test 123
2    rrreee     test 456
3    rrreee     test 789
4    gggfff     test 156
5    gggfff     test 567
по идее мне должно выдать 2 результата
HTML5
1
2
3
id   session   message
1    rrreee     test 123
4    gggfff     test 156
но не выходит, и я не понимаю почему даже после вашего объяснения
можете указать какой мне при этом запрос нужно сделать чтобы получить желаемое?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
02.06.2018, 21:07 4
Цитата Сообщение от Nebiros Посмотреть сообщение
Не совсем понял, я думал что должно выбирать по одной записи, уникального значения указанного столбца, как я понимал исходя упорядоченности
А по какому признаку упорядочивать?
Цитата Сообщение от Nebiros Посмотреть сообщение
по идее мне должно выдать 2 результата
А почему должно для значения session rrreee id быть 1, а не 2 или 3?

Когда-то mysql разрешала использовать любые столбцы в group by (в отличае от того же postgresql), что есть не хорошо, поскольку выбиралось оставшееся значение исходя из фазы Луны и погоды на Марсе.

Цитата Сообщение от Nebiros Посмотреть сообщение
можете указать какой мне при этом запрос нужно сделать чтобы получить желаемое?
что-то такое
MySQL
1
2
3
4
5
6
7
8
9
SELECT `s`.*
FROM (
    SELECT MIN(`id`) AS `id`
    FROM `session` AS `s`
    WHERE `s`.`id` <> 0
    GROUP BY `s`.`session`
) AS `t`
JOIN `session` AS `s` ON
    `s`.`id` = `t`.`id`
0
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.06.2018, 21:14  [ТС] 5
Цитата Сообщение от Jewbacabra Посмотреть сообщение
А по какому признаку упорядочивать?
по id ( AUTOINCREMENT), ORDER BY `id` DESC , ну то есть показывать последние сообщения в каждой сессии сообщений...
собственно может я вообще не правильно делаю, суть вообще делать переписку между разными пользователями, может посоветуете более правильный подход?
Цитата Сообщение от Jewbacabra Посмотреть сообщение
что-то такое
попробую покрутить, хоть так сложилось что с join не дружу
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
02.06.2018, 21:16 6
Цитата Сообщение от Nebiros Посмотреть сообщение
по id ( AUTOINCREMENT), ORDER BY `id` DESC , ну то есть показывать последние сообщения в каждой сессии сообщений...
А если нет id? А если и есть, то почему приоритет следует отдавать именно id и именно по-убыванию? Чтобы таких вопросов не возникало так делать запретили
0
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.06.2018, 21:31  [ТС] 7
Цитата Сообщение от Jewbacabra Посмотреть сообщение
А если нет id? А если и есть, то почему приоритет следует отдавать именно id и именно по-убыванию? Чтобы таких вопросов не возникало так делать запретили
Как так нет id, у меня например все таблицы имеют id уникальный ( AUTOINCREMENT), каждая запись которая добавляется инсертом имеет уникальный id по возрастанию, именно исходя из этого я и выбирают последние добавленные записи.
Но в данном случае мне нужны все последние записи из каждой сессии, честно говоря, не думал что в этом будет проблема...
Но раз такие пироги, подскажите по какой схеме тогда лучше делать задуманное?
То есть пользователи пишут друг другу сообщения, но в списке сообщений выводить сразу только самые последние в их переписке, ну и при нажатии на них уже выводились остальные, ну вывод остальных то ясное дело как делать...

Добавлено через 2 минуты
Цитата Сообщение от Jewbacabra Посмотреть сообщение
то почему приоритет следует отдавать именно id
для этого я и указываю ORDER BY `id` DESC
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
02.06.2018, 21:41 8
Цитата Сообщение от Nebiros Посмотреть сообщение
Как так нет id, у меня например все таблицы имеют id уникальный ( AUTOINCREMENT), каждая запись которая добавляется инсертом имеет уникальный id по возрастанию, именно исходя из этого я и выбирают последние добавленные записи.
А у меня например нет, что делать? Каждая задача может требовать разное поведение и поэтому нельзя отдавать предпочтение одному из множества вариантов.
Цитата Сообщение от Nebiros Посмотреть сообщение
для этого я и указываю ORDER BY `id` DESC
ORDER BY решает другую задачу
0
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.06.2018, 21:48  [ТС] 9
Цитата Сообщение от Jewbacabra Посмотреть сообщение
А у меня например нет, что делать? Каждая задача может требовать разное поведение и поэтому нельзя отдавать предпочтение одному из множества вариантов.
можете подсказать как мне решить мою задачу? учитывая то что у меня есть id и у каждой группы сообщений есть уникальный ключ?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
02.06.2018, 21:48 10
Цитата Сообщение от Nebiros Посмотреть сообщение
можете подсказать как мне решить мою задачу?
я уже подсказал
0
02.06.2018, 21:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2018, 21:48
Помогаю со студенческими работами здесь

Ошибка Unknown column 'jea.catid' in 'on clause'
Добрый день ув. пользователи! Подскажите пожалуйста, как правильно сделать, не получаеться...

Ошибка при импорте базы #1052 - Column 'id' in on clause is ambiguous
Привет всем, как исправить эту ошибку #1052 - Column 'id' in on clause is ambiguous???

Ошибка буквах есть а при цифрах все работает Unknown column 'eforie' in 'where clause'
Здравствуйте объясните плиз почему этот код выполняться когда ввожу цифры а если буквы то выдает...

Выводится ошибка mysql_fetch_array() expects parameter 1 to be resource, либо Unknown column 'значение переменной $prname' in WHERE clause
Здравствуйте! Прошу помочь, перерыл много чего, решения нет. Имеется такой код: &lt;?php...

Ошибка PLS-00428: an INTO clause is expected in this SELECT statement
Получил задание написать функцию, которая получает на вход тип склада (поле Storage_have), а...

Unknown column '' in 'where clause'
Прошу, скажите что не так))? &lt;? $update_sql = (&quot;UPDATE table1 SET `name` = `$_POST`, `mini`...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru