Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mysql pilih rekursif dapatkan semua anak dengan beberapa level

Tidak ada solusi sebelumnya yang berhasil untuk saya. Keduanya hanya berfungsi jika orang tua disimpan ke dalam database dalam urutan tertentu.

Saya harus mengakui bahwa saya tidak sepenuhnya memahami cara kerja kueri tetapi dapat menemukan cara yang sesuai untuk saya (setidaknya lebih baik daripada jawaban lainnya).

Data yang kueri pertama dan kedua tidak berfungsi adalah:

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

Jika Anda menggunakan kueri pertama dan kedua dalam kumpulan data ini, untuk id 5 Anda hanya mendapatkan hasil '6,7'. Tetapi jika Anda menggunakan kueri saya, Anda mendapatkan:'6,7,2,3,4' yang merupakan hasil yang diharapkan.

Versi saya:

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;

Semoga itu membantu seseorang. Saya tidak dapat berkomentar atau mengurangi jawaban lain karena kurangnya reputasi :(



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memilih server pencarian teks lengkap yang berdiri sendiri:Sphinx atau SOLR?

  2. Sisipkan/perbarui fungsi pembantu menggunakan PDO

  3. Panduan Merancang Database Untuk Notifikasi Di MySQL

  4. Mengapa saya tidak menggunakan fungsi mysql_* di PHP?

  5. Dalam SQL / MySQL, apa perbedaan antara ON dan WHERE dalam pernyataan bergabung?