Как разрешить "предложение ORDER BY не в списке SELECT" вызвало MySQL 5.7 с помощью SELECT DISTINCT и ORDER BY
Я установил новый Ubuntu, и у моего кода возникла проблема с MySQL.
( ! ) Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 3065
Expression #2 of ORDER BY clause is not in SELECT list, references column 'clicshopping_test_ui.p.products_date_added' which is not in SELECT list; this is incompatible with DISTINCT
in /home/www//boutique/includes/OM/DbStatement.php on line 97s
Кажется, MySQL 5.7 не разрешает запрос вроде:
select .... distinct with order by rand(), p.products_date_added DESC
Если я использую это, он работает:
select distinct .... with order by rand(),
Как разрешить эту ситуацию?
Мой запрос SQL в PHP
$Qproduct = $OSCOM_PDO->prepare('select distinct p.products_id,
p.products_price
from :table_products p left join :table_specials s on p.products_id = s.products_id
where products_status = :products_status
and products_view = :products_view
and p.products_archive = :products_archive
order by rand(),
p.products_date_added DESC
limit :products_limit');
$Qproduct->bindInt(':products_status', 1);
$Qproduct->bindInt(':products_view', 1);
$Qproduct->bindInt(':products_archive', 0);
$Qproduct->bindInt(':products_limit',
(int)MODULE_FRONT_PAGE_NEW_PRODUCTS_MAX_DISPLAY);
Ответы
Ответ 1
Если у вас есть контроль над сервером, и вы используете устаревший код, вы не можете легко изменить его, вы можете настроить SQL-сервер сервера и удалите "only_full_group_by" либо на время загрузки, выполнив запрос
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));'
или добавив sql_mode=''
в файл my.cnf.
Очевидно, что лучше изменить код, если у вас есть такая возможность, но если нет, это отключит это предупреждение.
Ответ 2
Чтобы устранить проблему, откройте следующий файл:
/etc/mysql/mysql.conf.d/mysqld.cnf
и добавьте следующую строку под блоком [mysqld]
sql-mode=""
Ответ 3
Попробуй это:
SELECT p.products_id, p.products_price
FROM :table_products p
LEFT JOIN :table_specials s on p.products_id = s.products_id
WHERE
products_status = :products_status AND
products_view = :products_view AND
p.products_archive = :products_archive
ORDER BY rand(), p.products_date_added DESC
GROUP BY p.products_id,p.products_price
LIMIT :products_limit
Ответ 4
С MAMP PRO
Вы не можете редактировать свой файл my.cnf напрямую. Вы должны использовать интерфейс MAMP PRO для редактирования файла my.cnf. В меню выберите "Файл"> "Редактировать шаблон"> "MySQL"> "my.cnf". Затем добавьте sql_mode=''
под ключом [mysqld]
Ответ 5
Если у вас есть phpMyAdmin:
1 - перейти на вкладки Variables
2-поисковая метка "sql mode"
3-отредактируйте контент и удалите режим: "ONLY_FULL_GROUP_BY"
4-сохранить
NB: не забудьте проверить запятую
Ответ 6
Ответ рапалаца сработал для меня (спасибо!). Но не забудьте зайти на домашнюю страницу phpmyadmin, чтобы увидеть вкладку переменных.