sql >> Database teknologi >  >> RDS >> Mysql

mysql vælg med while loop

du kan oprette mysql-funktion for at få rekordniveau, så kald det i din forespørgsel. Funktionsinputtet vil være post-id'et og udlæse niveaunummeret. Funktionen vil være sådan her

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 ;

the relation_column er den kolonne, der indeholder post-relationen. id_column er den kolonne, der indeholder post-id'et eller (primær nøgle).

den endelige forespørgsel vil være sådan her

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

håber dette ville hjælpe




  1. Sådan indstilles samlingen af ​​en database i SQL Server (T-SQL)

  2. SQL-databasemigrering med kommandolinje

  3. Implementer SQL Server AlwaysOn Availability Groups på Linux

  4. Hvordan implementerer man automatisk visningsopdatering, så snart der er ændring i databasen i AngularJs?