Jika Anda bertanya tentang "Apakah ada kueri rekursif mysql?" jawab "TIDAK".
Tapi ada pendekatan yang sangat bagus untuk menanganinya.
Buat tabel pembantu (katakanlah CatHierarchy)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
Data yang berlebihan ini memungkinkan dengan mudah dalam 1 kueri untuk memilih hierarki apa pun, dan dalam 2 sisipan mendukung hierarki apa pun (penghapusan juga dilakukan dalam 1 kueri dengan bantuan integritas kaskade penghapusan).
Jadi apa artinya ini. Anda melacak semua jalur dalam hierarki. Setiap node Cat harus menambahkan referensi ke dirinya sendiri (jarak 0), kemudian mendukung duplikasi dengan menambahkan data yang berlebihan tentang node yang ditautkan.
Untuk memilih kategori dengan sub cukup tulis:
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat - adalah parameter untuk menentukan akar kategori, ITU SEMUA!