Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL menemukan semua orang tua secara rekursif

Biarkan saya memberi Anda ide. Buat fungsi yang mendapatkan parent_id dari ID yang diberikan beberapa kali, sebut saja generasi. Cat10 generasi 1 akan menjadi induk yang CAT5 generasi 2 akan menjadi CAT3 dan seterusnya.

DROP FUNCTION IF EXISTS getNameIdGeneration;
DELIMITER $$
CREATE FUNCTION getNameIdGeneration(idPar int, generationPar int)
  RETURNS VARCHAR(1000) READS SQL DATA
BEGIN
  DECLARE auxLoopVar INT default 0;
  DECLARE parentIdVar INT default idPar;  
  DECLARE nameVar VARCHAR(1000) default NULL;

  count_loop: LOOP    
    SELECT parent_id INTO parentIdVar FROM Category_parent WHERE Category_id = parentIdVar;
    SET auxLoopVar = auxLoopVar + 1;        
    IF auxLoopVar >= generationPar THEN
      LEAVE count_loop;
    END IF;    
  END LOOP;
  SELECT name INTO nameVar FROM Category WHERE id = parentIdVar;

  RETURN nameVar;
END;
$$
DELIMITER ;

dengan asumsi bahwa Category_Id untuk CAT10 =10 jika Anda menguji fungsi yang diberikan

select getNameIdGeneration(10, 2);

CAT3

Sekarang yang Anda butuhkan hanyalah sebuah tabel yang berisi id CAT yang ingin Anda ketahui garis keturunannya

MariaDB [mydatabase]> select * from test;
+-------------+------------+
| category_id | generation |
+-------------+------------+
|          10 |          1 |
|          10 |          2 |
|          10 |          3 |
+-------------+------------+

MariaDB [mydatabase]> select generation, getNameIdGeneration(category_id, generation) as Name from test;
+------------+------+
| generation | Name |
+------------+------+
|          1 | CAT5 |
|          2 | CAT3 |
|          3 | CAT1 |
+------------+------+
3 rows in set (0.00 sec)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengatur global event_scheduler=ON bahkan jika MySQL di-restart?

  2. Cara membuat database mysql dengan sekuel (nodejs)

  3. Tampilkan hasil kueri SQL di php

  4. Kueri dengan banyak nilai dalam satu kolom

  5. Bagaimana cara menggunakan JdbcTemplate Spring untuk terhubung ke database MySql sederhana?