ac1919 Ne yazık ki o kadar kolay değil. Recursive işlem yapılması gerekiyor çünkü bir kategorinin kaç seviyede (derinlik) alt kategorisi olduğunu bilmiyoruz. Örneğin verilen bir kategorinin tüm alt kategorilerini recursive bir şekilde almak istiyorsa şöyle bir sorgu kullanması gerekecek:
# Alt kategorileri bulunacak olan üst kategori
SET @kategori = 5;
SELECT
ID,
Kategori,
USTID
FROM
(SELECT * FROM kategoriler ORDER BY USTID, ID) k1,
(SELECT @ID := @kategori) k2
WHERE
(FIND_IN_SET(USTID, @ID) OR ID = @ID)
AND
LENGTH(@ID := CONCAT(@ID, ',', ID));
MySQL 8+ ise:
# Alt kategorileri bulunacak olan üst kategori
SET @kategori := 5;
WITH RECURSIVE altkategoriler AS
(
SELECT
ID,
Kategori,
USTID
FROM
kategoriler
WHERE
ID = @kategori
UNION ALL
SELECT
k1.ID,
k1.Kategori,
k1.USTID
FROM
altkategoriler AS k2
JOIN
kategoriler AS k1 ON k2.ID = k1.USTID
)
SELECT * FROM altkategoriler ORDER BY USTID, ID;
Bu şekilde kategori ID'lerini alacak ve ürünler tablosunda da WHERE IN ile kategori id'sini tutan alanda sorgu yapacak.
Bu işi bir de PHP tarafında yapmak var ama orada da pek değişen bir durum yok, yine recursive işlem yapması lazım ya da referans değişkenler vs kullanarak kayıtlar üzerinden geçip bir değişkene id leri dolduracak.