sql >> Database >  >> RDS >> Mysql

een recursieve ouderlijst krijgen

Hier heb ik een kleine functie voor je gemaakt, ik heb het in mijn database (MAMP) gecontroleerd en het werkt prima

use mySchema;
drop procedure if exists getParents;

DELIMITER $$
CREATE PROCEDURE getParents (in_ID int)
BEGIN
DROP TEMPORARY TABLE IF EXISTS results;
DROP TEMPORARY TABLE IF EXISTS temp2;
DROP TEMPORARY TABLE IF EXISTS temp1;

CREATE TEMPORARY TABLE temp1 AS
  select distinct ID, parentID
    from tasks
    where parentID = in_ID;

create TEMPORARY table results AS
  Select ID, parentID from temp1;

WHILE (select count(*) from temp1) DO
  create TEMPORARY table temp2 as
    select distinct ID, parentID 
      from tasks 
      where parentID in (select ID from temp1);

  insert into results select ID, parentID from temp2;
  drop TEMPORARY table if exists temp1;
  create TEMPORARY table temp1 AS
    select ID, parentID from temp2;
  drop TEMPORARY table if exists temp2;

END WHILE;


select * from results;

DROP TEMPORARY TABLE IF EXISTS results;
DROP TEMPORARY TABLE IF EXISTS temp1;

END $$
DELIMITER ;

deze code brengt alle ouders terug naar elke diepte. Je kunt uiteraard extra velden aan de resultaten toevoegen

gebruik het zo

call getParents(9148)

bijvoorbeeld



  1. Kan geen gegevens naar het transport schrijven. Vs2017 ASP.net kernsteiger (MSSQL VENSTER 10)

  2. Is er een manier om updates/verwijderingen uit te schakelen, maar toch triggers toe te staan ​​om ze uit te voeren?

  3. INSERT INTO ... RETURNING - dubbelzinnige kolomverwijzing

  4. Hoe lang is de SHA256-hash?