Agrégation sans groupes : solutions pour MySQL 5.6
Dans MySQL 5.6, la fonction ANY_VALUE(), qui permet d'agréger des colonnes non groupées , n'est pas disponible. Cela pose un défi lors de la migration des requêtes de MySQL 5.7 vers 5.6.
Modification du mode MySQL
Une solution consiste à modifier le mode SQL pour l'environnement de production. En définissant le mode ONLY_FULL_GROUP_BY sur vide, cela désactivera temporairement la restriction sur l'agrégation des colonnes non groupées.
SET SESSION sql_mode = ''; /* Your query here */ SET SESSION sql_mode = @mode;
Méthodes d'agrégation alternatives
Cependant, il est important à noter que la requête en question n'est peut-être pas idéale. Il renvoie une ligne aléatoire du tableau « images » pour chaque pays.
Une approche plus fiable consiste à sélectionner une ligne d'image spécifique en fonction d'un critère, tel que la colonne « id ».
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 avec un choix d'image prévisible. Il utilise la colonne « id » pour sélectionner la « première » image pour chaque pays.
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!