Maison > Article > base de données > Comment puis-je parcourir les ensembles de résultats dans MySQL ?
Bouclage sur des ensembles de résultats dans MySQL
Cet article explore le concept de bouclage sur des ensembles de résultats dans MySQL, une opération fondamentale dans la programmation de bases de données. Notre objectif est d'émuler les fonctionnalités du code PHP suivant :
$result = mysql_query("SELECT something FROM somewhere WHERE some stuff"); while ($row = mysql_fetch_assoc($result)) { // check values of certain fields, decide to perform more queries, or not // tack it all into the returning result set }
Approche basée sur un curseur
MySQL fournit des curseurs pour itérer sur les ensembles de résultats. Cependant, il lui manque des fonctionnalités telles que la syntaxe FOR EACH ROW pour les implémentations de déclencheurs. Malgré cela, il est possible de créer une boucle basée sur un curseur en utilisant l'approche suivante :
SET @S = 1; LOOP SELECT * FROM somewhere WHERE some_conditions LIMIT @S, 1 -- IF NO RESULTS THEN LEAVE -- DO SOMETHING SET @S = @S + 1; END LOOP
Procédure stockée avec curseur
Une manière plus structurée de mettre en œuvre cela la logique passe par une procédure stockée qui utilise un curseur. Voici un exemple :
CREATE PROCEDURE GetFilteredData() BEGIN DECLARE bDone INT; DECLARE var1 CHAR(16); -- or approriate type DECLARE var2 INT; DECLARE var3 VARCHAR(50); DECLARE curs CURSOR FOR SELECT something FROM somewhere WHERE some stuff; DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1; DROP TEMPORARY TABLE IF EXISTS tblResults; CREATE TEMPORARY TABLE IF NOT EXISTS tblResults ( --Fld1 type, --Fld2 type, --... ); OPEN curs; SET bDone = 0; REPEAT FETCH curs INTO var1, var2, var3; IF whatever_filtering_desired -- here for whatever_transformation_may_be_desired INSERT INTO tblResults VALUES (var1, var2, var3); END IF; UNTIL bDone END REPEAT; CLOSE curs; SELECT * FROM tblResults; END
Considérations
Bien que les curseurs puissent être utiles pour implémenter des règles métier complexes, ils présentent certains inconvénients. Par conséquent, il est recommandé d'envisager des méthodes alternatives, telles que l'expression des transformations et des filtres souhaités dans une seule requête SQL déclarative.
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!