Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql select avec boucle while

vous pouvez créer une fonction mysql pour obtenir le niveau d'enregistrement, puis l'appeler dans votre requête. l'entrée de la fonction sera l'identifiant de l'enregistrement et la sortie le numéro de niveau. la fonction sera comme ceci

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 ;

la relation_column est la colonne qui contient l'enregistrement relation.la id_column est la colonne qui contient l'identifiant de l'enregistrement ou (clé primaire).

la requête finale ressemblera à ceci

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

j'espère que cela vous aidera