Bonjour,
Le tri de la liste des pays est fait dans back/types/country.php :
... ORDER BY a.zone_ordering ASC, a.zone_name_english ASC
zone_ordering est donc bien prioritaire, le nom anglais n'est que le critère de départage. Votre idée est la bonne (la liste du checkout passe par cette même requête), il reste juste à remplir zone_ordering correctement.
Deux raisons pour lesquelles votre UPDATE n'a rien changé :
1) La jointure sur zone_id. zone_id est un auto-incrément propre à chaque base : si aa_zone vient d'une autre installation, ses zone_id ne correspondent pas à ceux de fr_hikashop_zone, et la copie tombe à côté. Faites la jointure sur zone_name_english, qui est stable.
2) Il faut une valeur distincte pour CHAQUE pays. Tout pays resté à 0 (la valeur par défaut) remonte en tête, avant vos pays ordonnés, puisque le tri applique zone_ordering en premier. À vérifier :
SELECT COUNT(*) FROM fr_hikashop_zone WHERE zone_type='country' AND zone_ordering = 0;
Une méthode fiable, en numérotant selon le nom français (adaptez le nom de la colonne française de aa_zone) :
-- 1) numéroter aa_zone dans l'ordre français
SET @i := 0;
UPDATE aa_zone
SET zone_ordering = (@i := @i + 1)
WHERE zone_type = 'country'
ORDER BY nom_francais COLLATE utf8mb4_unicode_ci;
-- 2) recopier vers HikaShop en joignant sur le nom anglais (stable)
UPDATE fr_hikashop_zone h
JOIN aa_zone a ON a.zone_name_english = h.zone_name_english
SET h.zone_ordering = a.zone_ordering
WHERE h.zone_type = 'country';
Le COLLATE (utf8mb4_unicode_ci, ou utf8_unicode_ci selon l'encodage de votre table) fait que "États-Unis" ou "Égypte" se trient bien sous E et non en fin de liste.
Pour votre inquiétude sur les mises à jour : la table des zones n'est remplie qu'à la première installation, les mises à jour ne réécrivent pas ses lignes. Vos zone_name vidés et vos zone_ordering sont donc conservés.