Menukar Pertanyaan MSSQL CTE kepada MySQL
Ungkapan Jadual Biasa (CTE) ialah alat yang berkuasa untuk pertanyaan rekursif dalam Microsoft SQL Server. Walau bagaimanapun, MySQL tidak menyokong CTE, menimbulkan cabaran apabila menukar pertanyaan berasaskan CTE kepada MySQL.
Dalam contoh yang disediakan, pertanyaan CTE digunakan untuk membina pepohon kategori dari bawah ke atas, bermula daripada yang ditentukan ID kategori. Untuk meniru fungsi ini dalam MySQL, prosedur tersimpan rekursif mesti dilaksanakan.
Mencipta Prosedur Tersimpan Rekursif
Prosedur tersimpan MySQL berikut meniru gelagat 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;
Penggunaan
Untuk menggunakan prosedur tersimpan, panggilnya dengan ID kategori permulaan yang diingini sebagai hujah:
CALL get_category_tree(197);
Ini akan mencetak pokok kategori bermula dari kategori 197, merentasi hierarki sehingga akar dicapai.
Atas ialah kandungan terperinci Bagaimana untuk Menghijrahkan Pertanyaan Pokok Kategori Berasaskan MSSQL CTE ke MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!