MySQL tidak memiliki kueri rekursif, yang merupakan bagian dari SQL standar. Banyak merek database lain yang mendukung fitur ini, termasuk PostgreSQL (lihat http://www.postgresql.org/docs/8.4/static/queries-with.html ).
Ada beberapa teknik untuk menangani data hierarkis di MySQL.
- Sederhananya adalah menambahkan kolom untuk mencatat hierarki tempat foto tersebut berada. Kemudian Anda dapat mencari foto-foto yang termasuk dalam hierarki yang sama, mengambil semuanya kembali ke aplikasi Anda dan mencari tahu yang Anda butuhkan di sana. Ini sedikit boros dalam hal bandwidth, mengharuskan Anda menulis lebih banyak kode aplikasi, dan tidak baik jika pohon Anda memiliki banyak node.
Ada juga beberapa teknik cerdas untuk menyimpan data hierarkis sehingga Anda dapat menanyakannya:
-
Pencacahan Jalur menyimpan daftar ancestor dengan setiap node. Misalnya, foto 5 dalam contoh Anda akan menyimpan "0-2-4-5". Anda dapat mencari ancestor dengan mencari node yang jalurnya digabungkan dengan "%" cocok dengan jalur 5 dengan
LIKE
predikat. -
Kumpulan Bersarang adalah teknik yang kompleks namun cerdas yang dipopulerkan oleh Joe Celko dalam artikel dan bukunya "Trees and Hierarchical in SQL for Smarties." Ada banyak blog dan artikel online tentang itu juga. Sangat mudah untuk menanyakan pohon, tetapi sulit untuk menanyakan anak atau orang tua langsung dan sulit untuk menyisipkan atau menghapus node.
-
Tabel Penutup melibatkan penyimpanan setiap hubungan leluhur/keturunan dalam tabel terpisah. Sangat mudah untuk menanyakan pohon, mudah untuk menyisipkan dan menghapus, dan mudah untuk menanyakan orang tua atau anak langsung jika Anda menambahkan panjang jalur kolom.
Anda dapat melihat informasi lebih lanjut membandingkan metode ini dalam presentasi saya Objek Praktis -Model Berorientasi dalam SQL atau buku saya yang akan datang SQL Antipatterns:Menghindari Perangkap Pemrograman Basis Data .