sql >> Databasteknik >  >> RDS >> Mysql

få en rekursiv föräldralista

Här gjorde jag en liten funktion åt dig, jag kollade den i min databas (MAMP) och den fungerar bra

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 ;

den här koden kommer att returnera alla föräldrar till vilket djup som helst. Du kan självklart lägga till ytterligare fält i resultaten

använd det så här

call getParents(9148)

till exempel



  1. mysql, bigint eller decimal för att lagra> 32 bitars värden men mindre än 64 bitar

  2. Kan Visual Studio Express 2008 ansluta till MySQL?

  3. hitta liknande böcker baserade på köpta böcker baserade på bokmeta-sökord

  4. Windows kan inte hitta 'http://.127.0.0.1:%HTTPPORT%/apex/f?p=4950'. Se till att du skrivit namnet korrekt och försök sedan igen