MSSQL CTE ベースのカテゴリ ツリー クエリを MySQL に移行するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-20 17:06:18
オリジナル
328 人が閲覧しました

How to Migrate a MSSQL CTE-Based Category Tree Query to MySQL?

MSSQL CTE クエリの MySQL への変換

共通テーブル式 (CTE) は、Microsoft SQL Server の再帰クエリ用の強力なツールです。ただし、MySQL は CTE をサポートしていないため、CTE ベースのクエリを MySQL に変換するときに問題が生じます。

この例では、CTE クエリを使用して、指定されたカテゴリから開始してボトムアップでカテゴリ ツリーを構築しています。カテゴリID。この機能を MySQL で複製するには、再帰ストアド プロシージャを実装する必要があります。

再帰ストアド プロシージャの作成

次の MySQL ストアド プロシージャは、MSSQL の動作をシミュレートします。 CTE:

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;
ログイン後にコピー

使用法

ストアド プロシージャを使用するには、引数として目的の開始カテゴリ ID を指定して呼び出します。

CALL get_category_tree(197);
ログイン後にコピー

これにより、カテゴリ 197 から始まり、ルートに到達するまで階層をたどってカテゴリ ツリーが出力されます。

以上がMSSQL CTE ベースのカテゴリ ツリー クエリを MySQL に移行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート