Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql select recursive get all child с множество нива

Нито едно от предишните решения не работи за мен. И двете работят само ако родителите са записани в базата данни в определен ред.

Трябва да призная, че не разбирам напълно начина, по който работи заявката, но мога да намеря начин, който работи за мен (поне по-добър от другите отговори).

Данните, с които първата и втората заявка не работят, са:

idFolder , FolderName , idFolderParent
   1           ADoc           Null  
   2           ADoc1           7  
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4          Null
   6           ADoc5           5
   7           ADoc6           5

Ако използвате първата и втората заявка в този набор от данни, за идентификатора 5 получавате само '6,7'. Но ако използвате моята заявка, получавате:„6,7,2,3,4“, което е очакваният резултат.

Моята версия:

SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder 
WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder 
JOIN
(SELECT @pv:=5) tmp
) a;

Дано помогне на някого. Не мога да коментирам или да отслабвам другите отговори поради липса на репутация :(



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql:Изберете всички данни между две дати

  2. Как да активирам mysqlnd за php?

  3. Въпросителни знаци на MySQL db вместо знаци на иврит..?

  4. Предаване на масив към заявка с помощта на клауза WHERE

  5. Как да накарам mysqli да хвърля изключения с помощта на MYSQLI_REPORT_STRICT?