DPA adlı üyeden alıntı: mesajı görüntüle
$kategori1 = 'SELECT * FROM kategori ORDER BY kat_id DESC';
   foreach ($kategori1 as $v) {
  $kategori2 = 'SELECT * FROM kategori WHERE parent_id = "{$v->kat_id}" ORDER BY kat_id DESC';
  foreach ($kategori2 as $vl) {
     echo '<option value="'.$vl->kat_id.'">'.$v->anaKategori.' > '.$vl->subKategori.'</option>';
    }
}
Yukarıda ki kod bloğu dener misin rica etsem yani tam olarak nasıl bir yapı kullandığını bilemediğim için örnek olsun diye yazdım bunu hızlıca bir kontrol edersen işine yarayabilir tabi çok fazla ana kategori ve alt kategorin varsa bu yöntem yerine ana kategori sonrası jQuery - Ajax yardımıyla alt kategorileri çekmende fayda var.
Teşekkür ederim denedim ama farklı bir sonuç elde ettim. Benim denediklerimde sizinle aynı yöntemdi hemen hemen.
İstediğim kategori ağacı tam olarak Opencart admin panelinde ki kategori sistemi.
Örnek OC Kategori Ağacı​​​
tam olarak bunun gibi yapmaya çalışıyorum fakat beceremedim.
Tablo yapım yukarıda belirttiğim gibi şöyle,
id - parent_id - title - description



Evet uğraştırdı biraz ama Opencat'tan devşirerek çözümledim.
İşine yarayacak arkadaşlar mutlaka olacaktır. Bu sebeple buraya bırakıyorum.
3 adet tablo gerekli,
1 - hizmet, 2- hizmet_detay, 3- hizmet_path
1- Hizmet tablosu
hizmet_id - parent_id - sort_order- status
2- Hizmet detay tablosu
hizmet_id - baslik - detay
3- hizmet_path tablosu
hizmet_id - path_id - level

3. Tablodan bahsedeyim. Level alanına 1 yazarsanız ana kategori, 0 yazarsanız alt kategori olarak değerlendiriyor ve alt kategorileri gruplayarak ana kategori yanına yazıyor.
örnek veri şöyle olmalı 3. tablo yapısına göre.
1-1-1
2-2-1
3-1-0
3-3-1
gibi.

SQL tarafı şöyle;

$results = $db->query("
SELECT
cp.hizmet_id AS hizmet_id,
GROUP_CONCAT( cd1.`baslik` ORDER BY cp.`level` SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;' ) AS `baslik`,
c1.parent_id,
c1.sort_order
FROM
`hizmet_path` cp
LEFT JOIN `hizmet` c1 ON ( cp.hizmet_id = c1.hizmet_id )
LEFT JOIN `hizmet` c2 ON ( cp.path_id = c2.hizmet_id )
LEFT JOIN `hizmet_detay` cd1 ON ( cp.path_id = cd1.hizmet_id )
LEFT JOIN `hizmet_detay` cd2 ON ( cp.hizmet_id = cd2.hizmet_id )
GROUP BY cp.hizmet_id
ORDER BY `baslik` ASC
");
Array
foreach ($results as $result) {
$categories[] = array(
'hizmet_id' => $result['hizmet_id'],
'baslik' => $result['baslik'],
'sort_order' => $result['sort_order']
);

}
View tarafı

<table style="width: 100%;" id="example" class="table table-hover table-striped table-bordered">
    <thead>
        <tr>
            <th>S.No</th>
            <th>Sayfa Başlık</th>
            <th>Sıra</th>
            <th class="text-center">işlem</th>
        </tr>
    </thead>
<tbody>
    <?php if ($categories) { ?>
    <?php foreach ($categories as $category) { ?>
    <tr>
     <td class="text-left"><?php echo $category['hizmet_id']; ?></td>
     <td class="text-left"><?php echo $category['baslik']; ?></td>
     <td class="text-right"><?php echo $category['sort_order']; ?></td>
     <td class="text-right"><a href="" data-toggle="tooltip" title="#" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>
    </tr>
    <?php } ?>
    <?php } else { ?>
    <tr>
     <td class="text-center" colspan="4"><?php echo $text_no_results; ?></td>
    </tr>
    <?php } ?>
</tbody>
</table>
Umarım yararlı olmuştur.