Construire une séquence d'entiers dans MySQL
Créer une simple séquence d'entiers de n à m inclus peut être une exigence courante dans les opérations de base de données . Pour y parvenir dans MySQL, une méthode fréquemment recommandée consiste à utiliser une expression de table commune (CTE) récursive.
Une de ces approches consiste à fusionner une CTE récursive avec une table existante :
WITH RECURSIVE Numbers AS ( SELECT n, n + 1 AS next_n FROM Numbers WHERE n < m UNION SELECT m, NULL ) SELECT n FROM Numbers ORDER BY n;
Dans Dans cet exemple, le CTE Numbers est défini pour générer une séquence d'entiers en ajoutant itérativement 1 à la valeur précédente jusqu'à ce qu'elle atteigne la valeur maximale spécifiée m. La requête utilise ensuite ce CTE pour sélectionner et ordonner la séquence générée.
Une approche alternative, comme suggérée dans la question de référence, consiste à utiliser une seule requête avec une variable définie par l'utilisateur :
SET @row := 0; SELECT @row := @row + 1 AS row, t.* FROM some_table t, (SELECT @row := 0) r;
Cette méthode initialise la variable @row à 0 et l'incrémente de 1 pour chaque ligne de l'ensemble de résultats. Bien que cette approche puisse être plus simple dans certains scénarios, elle repose sur des variables définies par l'utilisateur qui ne sont pas prises en charge dans toutes les versions ou contextes de MySQL.
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!