Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql wybierz z pętlą while

możesz utworzyć funkcję mysql, aby uzyskać poziom rekordu, a następnie wywołać ją w swoim zapytaniu. Wejście funkcji będzie identyfikatorem rekordu, a wyjściem numer poziomu. funkcja będzie taka

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 ;

Relacja_kolumna to kolumna, która przechowuje relację rekordu. id_column to kolumna, która przechowuje identyfikator rekordu lub (klucz podstawowy).

końcowe zapytanie będzie takie

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

mam nadzieję, że to pomoże




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie MySql do bieżącej korekty salda

  2. Dane obcięte dla kolumny „xxxx” w wierszu 1

  3. MySQL Wybierz gdzie w wielu do wielu

  4. Jak stworzyć architekturę punktu w czasie w MySQL

  5. Kiedy rozważyć Solr