Почему выполнение count () возвращает ошибку PhpMyAdmin с backtrace - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь выполнить следующую команду через PHPMyAdmin 4.8.4:

SELECT *, count(ref_id) AS c FROM `articles_test` group by ref_id order by c desc

Это возвращает следующее сообщение об ошибке:

enter image description here

После этой ошибки возвращается:

Уведомление в ./libraries/classes/Display/Results.php#2488 Попытка получить свойство необъекта

Backtrace

. / Library / classes / Display / Results.php # 2389: PhpMyAdmin \ Display \ Results -> _ addClass (строка «data hide», логическое false, NULL, строка '',) ./libraries/classes/Display / Results.php # 3818: PhpMyAdmin \ Display \ Results -> _ buildNullDisplay (строка 'data hide', логическое false, NULL,) ./libraries/classes/Display/Results.php#3071: PhpMyAdmin \ Display \ Results->_getDataCellForNonNumericColumns (NULL, строка «скрыть данные», NULL, массив, массив, логическое значение false, массив, массив, массив, логическое значение false, массив,, NULL,) ./libraries/classes/Display/Results.php#2695: PhpMyAdmin \Показать \ Результаты -> _ getRowValues ​​(, массив, целое число 24, массив, массив, строка 'grid_edit click2 ', массив, строка' SELECT *, count (ref_id) AS c FROM articles_test группировка по порядку ref_id по c desc ', массив,) ./libraries/classes/Display/Results.php#4287: PhpMyAdmin \ Display \Результаты -> _ getTableBody (, массив, массив, массив, логическое значение false,) ./libraries/classes/Sql.php#1738: PhpMyAdmin \ Display \ Results-> getTable (, массив, массив, логическое значение false,) ./libraries/classes / Sql.php # 2031: PhpMyAdmin \ Sql-> getHtmlForSqlQueryResultsTable (, строка './themes/pmahomme/img/', NULL, массив, логическое значение true, строка '2554', целое число 25, NULL, массив,)./libraries/classes/Sql.php#2252: PhpMyAdmin \ Sql-> getQueryResponseForResultsReturned (, массив, строка 'test', строка 'Articles_test', NULL, NULL,, строка './themes/pmahomme/img/', string '2554 ', целое число 25, NULL, NULL, NULL, NULL, NULL, строка' SELECT *, count (ref_id) AS c FROM articles_test группировка по порядку ref_id по c desc ', NULL,) ./import.php#736: PhpMyAdmin \ Sql-> executeQueryAndGetQueryResponse (массив, логическое значение false, строка 'test', строка 'Articles_test', NULL, NULL, NULL, NULL, NULL, NULL, строка 'tbl_structure.php', строка './themes/pmahomme/img/', NULL, NULL, NULL, строка 'SELECT *, count (ref_id) AS c FROM articles_test сгруппированы поref_id заказ по c desc ', NULL, NULL,)

Я использую следующую систему:

5.7.24-0ubuntu0.16.04.1 - Apache / 2.4.18 (Ubuntu) Datenbank-Client Версия: libmysql - mysqlnd 5.0.12-dev - 20150407 - $ Id: b5c5906d452ec590732a93b051f3827e02749b83 $ PHP-Erweiterung: mysqliDokumentation curlDokumentation * mbstringnt:1028 *

Это ошибка, или может быть проблема с БД?Ошибки не видны, таблицы выглядят нормально.

1 Ответ

0 голосов
/ 22 декабря 2018

Какую версию MySQL вы используете.Запрос

SELECT *, count(ref_id) AS c 
FROM `articles_test` 
group by ref_id order by c desc

не будет выполняться с настройками по умолчанию в MySQL 5.7 и выше из-за значения по умолчанию sql_mode only_full_group_by.Проблема в том, что вы смешиваете нотацию всех столбцов (*) с агрегатной функцией.Старые версии MySQL допускали этот (ошибочный) запрос, но MySQL 5.7 по умолчанию более строгий.

Если вы хотите перечислить все строки из article_test с количеством для каждого ref_id (то же значение, повторенное для того же ref_id), используйтеподзапрос:

SELECT a.*, count(ref_id) AS c 
FROM articles_test a
  JOIN (
    SELECT at.ref_id, count(*) as refid_count
    FROM articles_test at
    GROUP BY at.ref_id
  ) q as q.ref_id=a.ref_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...