sql >> データベース >  >> RDS >> Mysql

再帰的な親リストを取得する

    ここで、私はあなたのために小さな関数を作成しました。データベース(MAMP)でチェックしましたが、正常に動作します

    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 ;
    

    このコードは、すべての親を任意の深さに返します。明らかに、結果に任意のフィールドを追加できます

    このように使用してください

    call getParents(9148)
    

    たとえば



    1. PHPのPDOで使用するMySQLデータベースを選択するにはどうすればよいですか?

    2. MariaDB警告:「[メール保護]」には両方があります...パスワードは無視されます

    3. MySQLテーブルから値をプルして新しい変数を作成しました

    4. 休止状態エラー:参照されるテーブルの主キーがありません