Fonction ANY_VALUE et compatibilité MySQL
La version 5.6 de MySQL ne dispose pas de la fonction ANY_VALUE, introduite dans MySQL 5.7. Cela présente un défi pour les développeurs utilisant la fonction ANY_VALUE dans les versions plus récentes de MySQL mais travaillant avec 5.6 dans des environnements de production.
Mode et compatibilité SQL
Le mode ONLY_FULL_GROUP_BY de MySQL empêche les requêtes. comme celui présenté dans la question, qui récupère les colonnes qui ne sont pas incluses dans la clause GROUP BY. La désactivation de ce mode permet à la requête de s'exécuter dans MySQL 5.6 :
SET @mode := @@SESSION.sql_mode; SET SESSION sql_mode = ''; /* your query here */ SET SESSION sql_mode = @mode;
Cependant, il convient de noter que cette approche n'est pas recommandée car elle peut produire des résultats indéterminés. La fonction ANY_VALUE renvoie une valeur sélectionnée aléatoirement dans le groupe, ce qui peut entraîner une confusion et des problèmes de support.
Requête alternative pour MySQL 5.6
Pour obtenir des résultats prévisibles, envisagez de modifier la requête pour sélectionner une image spécifique pour chaque pays. Si la table images contient une colonne d'ID à incrémentation automatique, la requête suivante peut être utilisée :
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 garantit qu'une image est renvoyée pour chaque pays, fournissant ainsi un ensemble de résultats plus cohérent et fiable.
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!