J'avais un site e-commerce que j'avais fait pour un examen de code qui regroupé SQL,PHP, JS, ... mais depuis je suis devenu front et j'ai complètement oublié le fonctionnement des requêtes.
J'ai relancé ce site et j'obtiens ces erreurs là :
Erreur sur la requête SQL. Message : Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'hus.article.id_article' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by Code : SELECT * FROM article WHERE categorie LIKE '%lampe%' GROUP BY categorie ORDER BY id_article DESC
ou encore
Erreur sur la requête SQL. Message : Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'hus.av.note' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by Code : SELECT ar.id_article, note, categorie, titre, prix, photo, id_promo FROM article ar LEFT JOIN avis av ON ar.id_article = av.id_article GROUP BY ar.id_article ORDER BY ar.id_article DESC LIMIT 0,16
Avant je n'avais pas de problème, peut-on m'aider ? Je sais que le soucis vient du group by mais je ne sais plus du tout comment faire cette requête proprement.
Si je pouvais avoir un exemple avec l'une de mes requêtes, je suis plutôt du genre à comprendre avec du concret qu'avec des explications
L'erreur retournée est due à l'option sql_mode=only_full_group_by.
Avant MySQL 5.7, par défaut, MySQL autorisait de ne pas avoir les mêmes colonnes au SELECT et au GROUP BY, ce qui était un peu étrange mais bon ... Depuis la 5.7 le sql_mode contient l'option only_full_group_by par défaut qui permet de refuser ce comportement et de se raccrocher aux comportements des autres SGBDR.
Du coup pour corriger ces erreurs ... Première solution changer la valeur de l'option sql_mode.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Sinon, je te conseille de reprendre tes requêtes utilisant GROUP BY pour respecter les colonnes nécessaires.
Dans la première :
SELECT *
FROM article
WHERE categorie
LIKE '%lampe%'
GROUP BY categorie
ORDER BY id_article DESC
Je ne vois pas l'intérêt du GROUP BY puisqu'il n'y a pas de fonction d'agrégat (COUNT, SUM, MIN, MAX, etc.). A quoi devait servir cette requête ? Si c'est simplement la liste des articles de la catégorie lampe, alors retires le GROUP BY complètement ...
Dans la deuxième :
SELECT ar.id_article, note, categorie, titre, prix, photo, id_promo
FROM
article ar
LEFT JOIN avis av
ON ar.id_article = av.id_article
GROUP BY ar.id_article
ORDER BY ar.id_article DESC
LIMIT 0,16
Idem que pour la première, le GROUP BY semble inutile ...
ABDESSEMED