Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL намира всички родители рекурсивно

Нека ви дам една идея. Създайте функция, която получава parent_id от даден ID няколко пъти, нека го наречем генериране. Cat10 поколение 1 ще бъде родител, който е CAT5 поколение 2 ще бъде CAT3 и т.н.

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 ;

като приемем, че Category_Id за CAT10 =10, ако тествате дадената функция

select getNameIdGeneration(10, 2);

CAT3

Сега всичко, от което се нуждаете, е таблица, която съдържа идентификатора на CAT, чието потекло искате да знаете

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. Вмъкване с родната заявка за Hibernate не работи за java.util.Date

  2. Премахнете крайните нули в десетичната стойност с промяна на дължината

  3. НАЛЯВО ПРИСЪЕДИНЯВАНЕ след GROUP BY?

  4. Грешка в MySQL Може да има само една колона TIMESTAMP с CURRENT_TIMESTAMP в клауза DEFAULT, въпреки че не правя нищо нередно

  5. Достъпът е отказан за създаване на първоначална база данни - как да дам правилния достъп?