Comment faire pour résoudre les “clause ORDER BY n'est pas dans la liste SELECT” causé MySQL 5.7 SELECT DISTINCT et COMMANDE PAR
J'ai installé le nouveau Ubuntu et mon code a un problème avec 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
Il semble MySQL 5.7 ne pas permettre à une requête du type:
select .... distinct with order by rand(), p.products_date_added DESC
Si j'utilise ce cela fonctionne:
select distinct .... with order by rand(),
Comment faire pour résoudre cette situation ?
Ma requête SQL en 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);
utilisation
Désolé, je ne comprends pas, pourrait me montrer un exemple, parce que c'est deux la fonction select distinct .... et sélectionnez-la ........ groupe par
group by
au lieu de DISTINCTESDésolé, je ne comprends pas, pourrait me montrer un exemple, parce que c'est deux la fonction select distinct .... et sélectionnez-la ........ groupe par
OriginalL'auteur kurama | 2016-04-24
Vous devez vous connecter pour publier un commentaire.
Si vous avez le contrôle du serveur et que vous exécutez du code legacy pas facile de changer, vous pouvez régler le mode SQL du serveur et supprimer "only_full_group_by", soit pour la durée de démarrage, par l'exécution de la requête
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));'
ou par l'ajout de
sql_mode=''
pour votre mon.cnf de fichier.Évidemment de son mieux pour changer votre code si vous en avez la possibilité, mais si pas, cela va désactiver cet avertissement.
sql_mode=''
pour votre mon.cnf de fichier, assurez-vous d'ajouter cette ligne sous une nouvelle ligne avec le[mysqld]
tête. Par exemple:[mysqld]
(nouvelle ligne)sql_mode = ''
. Sinon, vous obtiendrez une erreur lors de la tentative de redémarragemysql
, comme:Job for mysql.service failed because the control process exited with error code.
Merci!!!! J'ai eu 2 ordinateurs et dans l'un d'eux le code a travaillé et dans l'autre pas, et grâce à vous je l'ai résolu
Le
SET GLOBAL
requête n'a pas aidé.Le suivant a fonctionné pour moi: SET @@sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',"));
OriginalL'auteur Justin Cherniak
Dans le but de résoudre le problème, ouvrez le fichier suivant:
et ajoutez la ligne suivante sous [mysqld] bloc
OriginalL'auteur Wolfack
Essayez ceci:
OriginalL'auteur Dipanwita Kundu