Maison  >  Article  >  base de données  >  Comment migrer une requête d'arborescence de catégories basée sur MSSQL CTE vers MySQL ?

Comment migrer une requête d'arborescence de catégories basée sur MSSQL CTE vers MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-20 17:06:18328parcourir

How to Migrate a MSSQL CTE-Based Category Tree Query to 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn