Tek MySql Sorgusu ile üst ve alt kategorideki ürünleri listeleme?

BordoMavi

Profesyonel
Katılım
31 Eki 2007
Mesajlar
176
Konum
Hirçın Sulardan
Arkadaşlar merhaba. Şu şekilde 2 tablo yapım var;

categories
---------------------------------------
id | parent_id | heading |
---------------------------------------
1 | 0 | Category 1
---------------------------------------
2 | 1 | Category 1.1
---------------------------------------
3 | 1 | Category 1.2
---------------------------------------
4 | 3 | Category 1.2.1
---------------------------------------

products
---------------------------------------
id | category_id | heading |
---------------------------------------
1 | 1 | Product 1
---------------------------------------
2 | 3 | Product 2
---------------------------------------
3 | 3 | Product 3
---------------------------------------
4 | 4 | Product 4
---------------------------------------

products tablosunda ki category_id sütünundaki değerler categories tablosun da ki id sütunundaki değerlerle eşleşiyor.
Bir kaç sorgu ve php müdahalesi ile istediğim sonucu elde ediyorum aslında fakat esas yapmak istediğim bu işlemi tek Sql sorgusunda halledebilmek.
Şurada kodu var bakabilirsin veya kodu şu diye cevap vermektense şu şekilde ve şunları kullanarak yapabilirsin şeklinde cevaplar beni daha mutlu eder.
Yani işin algoritmik olarak yapısını merak ediyorum. Bir kaç saattir düşünüyorum fakat henüz bir bağlantı kurmadım Sql konusunda fazla bilgiye sahip olmadığımdan aslında tam olarak nelere bakmam gerektiğini bilemiyorum.
categories tablosunun maksimum derinliği 1.2.1 yani 2 alt kategorisinin alt kategori de olacak şekilde daha fazla derinleşmeyecek.

İstediğim 1. ve 2. derinlikteki categories sütununu çağırdığım da parent_id ile bu sütuna bağlı olan tüm alt kategorilere ekli product tablosunda yer alan verileri listelemek. 3. derinlikte ki tıkladığında sadece ona aitler listelenecek bu kısımda herhangi bir problemim yok. 1.ve 2. derinliktekiler de tek Sql sorgusu ile bu iş nasıl yapılabilir?
Biraz uzun ve karmaşık oldu sanırım ama anlayan arkadaşlar yardımcı olursa memnun olurum.
Şimdiden teşekkürler.
 

Angelo

Müptela
Katılım
13 Ara 2004
Mesajlar
9,603
Yaş
39
Konum
AZ
2 seviye için aşağıdaki mantığı kullanabilrisin, daha derin seviye için, bir o kadar daha JOIN kullanman, ya da php veya stored procedure yoluyla çözmen gerekiyor.

SELECT p.heading as urun, c1.heading as alt_kategori, c2.heading as ust_kategori
FROM products p
INNER JOIN categories c1 ON c1.id=p.category_id
LEFT OUTER JOIN categories c2 ON c2.id=c1.parent_id
 

BordoMavi

Profesyonel
Katılım
31 Eki 2007
Mesajlar
176
Konum
Hirçın Sulardan
[MENTION=5985]Angelo[/MENTION]
Aslında cevap bulamayınca php ile işimi halletmiştim ama mantığını anlayabilmek açısından verdiğin örnek için yinede teşekkür ederim.
 
Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur. iyinet.com sayfalarında yer alan yazı, görsel ve linklerle ilgili hukuki şikayetleriniz için Buradan iletişime geçmeniz durumunda, ilgili kanunlar ve yönetmelikler çerçevesinde en geç 7 gün içerisinde iyinet yönetimince tarafınıza dönüş sağlanacaktır.
Üst