Maison > Article > base de données > Comment migrer une requête d'arborescence de catégories basée sur MSSQL CTE vers MySQL ?
Transformation d'une requête MSSQL CTE en MySQL
Les expressions de table communes (CTE) sont un outil puissant pour les requêtes récursives dans Microsoft SQL Server. Cependant, MySQL ne prend pas en charge les CTE, ce qui pose un défi lors de la conversion de requêtes basées sur CTE vers MySQL.
Dans l'exemple fourni, une requête CTE est utilisée pour créer une arborescence de catégories de bas en haut, en commençant par un élément spécifié. identifiant de catégorie. Pour répliquer cette fonctionnalité dans MySQL, une procédure stockée récursive doit être implémentée.
Création d'une procédure stockée récursive
La procédure stockée MySQL suivante simule le comportement du CTE MSSQL :
CREATE PROCEDURE get_category_tree(IN start_category_id INT) BEGIN DECLARE done INT DEFAULT 0; DECLARE id INT; DECLARE pid INT; DECLARE name VARCHAR(255); # Initialize the cursor DECLARE cursor_categories CURSOR FOR SELECT id, parentid, name FROM category WHERE id = start_category_id; # Open the cursor OPEN cursor_categories; # Fetch the first row FETCH cursor_categories INTO id, pid, name; # While there are more rows WHILE done = 0 DO # Print the current row SELECT id, pid, name; # If the parent ID is NULL, mark as done IF pid IS NULL THEN SET done = 1; ELSE # Move the cursor to the parent row SET start_category_id = pid; FETCH cursor_categories INTO id, pid, name; END IF; END WHILE; # Close the cursor CLOSE cursor_categories; END PROCEDURE;
Utilisation
Pour utiliser la procédure stockée, appelez-la avec l'ID de catégorie de départ souhaité comme argument :
CALL get_category_tree(197);
Cela imprimera l'arborescence des catégories à partir de la catégorie 197, en remontant la hiérarchie jusqu'à ce que la racine soit atteinte.
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!