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 サイトの他の関連記事を参照してください。