Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL znajduje wszystkich rodziców rekursywnie

Pozwól, że przedstawię Ci pomysł. Utwórz funkcję, która kilka razy pobiera parent_id z podanego identyfikatora, nazwijmy to generowaniem. Pokolenie Cat10 1 będzie rodzicem, który jest pokoleniem CAT5, pokoleniem 2 będzie CAT3 i tak dalej.

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 ;

zakładając, że Category_Id dla CAT10 =10 jeśli testujesz daną funkcję

select getNameIdGeneration(10, 2);

KAT3

Teraz potrzebujesz tylko tabeli zawierającej identyfikator CAT, którego chcesz poznać pochodzenie

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. Używanie GROUP_CONCAT w podzapytaniu w MySQL

  2. Jak wybrać wiersz z maksymalną wartością kolumny w MySQL?

  3. Jak połączyć R z MySQL lub jak zainstalować pakiet RMySQL?

  4. Błąd złącza MySQL Python2.7 przy LOAD DATA LOCAL INFILE

  5. Python, MySQL _mysql_exceptions.ProgrammingError:(1064, 'Masz błąd w składni SQL