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

mysql select with while loop

    mysql関数を作成してレコードレベルを取得し、クエリで呼び出すことができます。関数入力はレコードIDになり、レベル番号を出力します。関数は次のようになります

    DELIMITER $$
    DROP FUNCTION IF EXISTS `getlevel` $$
    CREATE FUNCTION `get_level`(Id int(11)) RETURNS int(11) 
        DETERMINISTIC
    BEGIN 
    DECLARE levelNumber int(11); -- declare variable to record level
    DECLARE parent int(11); -- declare variable to hold the parent id
    set levelNumber = 0; -- set the level to zero at the begining
    set parent = (select `relation_column` from `table` where `id_column` = Id); -- get parent record of then id givin to function
    while parent > 0 DO  -- loop unitl parent = 0 or record has no parent
    set levelNumber = levelNumber + 1; -- increase level by 1
    set parent = (select `relation_column` from `table` where `id_column` = parent); -- re set parent id
    END 
    WHILE; 
    return levelNumber; -- return then level number
    END$$
    DELIMITER ;
    

    Relation_columnは、レコードの関係を保持する列です。id_columnは、レコードIDまたは(主キー)を保持する列です。

    最終的なクエリは次のようになります

    select `table`.`id_column`,`table`.`relation_column`,`table`.`name`,get_level(`table`.`id_column`) as  "level" from `table` 
    

    これがお役に立てば幸いです




    1. 異なる月の同じ日付を混合した日時のMySQLグループ化日

    2. インプロデュースされた配列をmysqlのプリペアドステートメントにバインドする際の問題

    3. 「トリニダード・トバゴ」を使用したOracleSQLDeveloperでの変数置換を回避する方法

    4. Postgres:エラー:キャッシュされたプランは結果タイプを変更してはなりません