Как разрешить "предложение 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, чтобы увидеть вкладку переменных.