Bagaimana untuk Menghijrahkan Pertanyaan Pokok Kategori Berasaskan MSSQL CTE ke MySQL?

Barbara Streisand
Lepaskan: 2024-11-20 17:06:18
asal
328 orang telah melayarinya

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

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;
Salin selepas log masuk

Penggunaan

Untuk menggunakan prosedur tersimpan, panggilnya dengan ID kategori permulaan yang diingini sebagai hujah:

CALL get_category_tree(197);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan