MySQL 5.6 : Alternative à la fonction ANY_VALUE
Lorsque vous travaillez avec les versions 5.7 et 5.6 de MySQL, vous pouvez rencontrer des problèmes concernant la fonction ANY_VALUE, qui n'est disponible que dans la version 5.7. Cela peut entraîner de la confusion et des erreurs lors de l'exécution de la requête. La question se pose : comment peut-on obtenir des fonctionnalités similaires dans MySQL 5.6 ?
MySQL 5.6 ne fournit pas d'équivalent direct à ANY_VALUE. Cependant, il existe des approches alternatives qui peuvent obtenir le résultat souhaité.
Désactiver le mode ONLY_FULL_GROUP_BY
Une option consiste à désactiver le mode SQL ONLY_FULL_GROUP_BY. Ce mode impose que toutes les colonnes non agrégées référencées dans une instruction SELECT doivent également apparaître dans la clause GROUP BY. En désactivant ce mode, MySQL permettra d'exécuter des requêtes comme celle-ci sans erreur :
SELECT c.id, c.name, ANY_VALUE(i.url) url, ANY_VALUE(i.lat) lat, ANY_VALUE(i.lng) lng FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
Pour désactiver ONLY_FULL_GROUP_BY, utilisez la syntaxe suivante :
SET @mode := @@SESSION.sql_mode; SET SESSION sql_mode = ''; /* your query here */ SET SESSION sql_mode = @mode;
Cependant, il est important noter que la désactivation de ONLY_FULL_GROUP_BY peut conduire à des résultats incorrects ou à un comportement inattendu dans certains cas.
Sélection de la « première » valeur
Une autre approche consiste à modifier la requête pour sélectionner une valeur spécifique dans la table des images, telle que la première. Ceci peut être réalisé en utilisant la fonction MIN() et les sous-requêtes :
SELECT c.id, c.name, i.* FROM countries c LEFT JOIN ( SELECT MIN(id) id, country_id FROM images GROUP BY country_id ) first ON c.id = first.country_id LEFT JOIN images i ON first.id = i.id
Cette requête renverra une ligne par pays, l'image étant la première du tableau, classée par son identifiant. Cette approche fournit un résultat prévisible et cohérent.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!