Örnek Olarak:

4
●151
create table kategori( no int(3) not null primary key auto_increment, alt int(3) not null, isim tinytext not null, slug tingtext not null );no sütunu kategorinin kendi numarası olacak.
insert into kategori values(1,0,'HTML Arka Planına Renk Verme','html-arka-planina-renk-verme');bu kayıt bir ana kategori çünkü alt sütunu 0 yani hiçbir kategorinin alt kategorisi değil.
insert into kategori values(2,1,'Örnek','ornek');Bu kayıt ise ilk kayda eklenen bir alt kategori yani senin örneğine göre 1.1 oluyor.
function kategori($alt_no = 0) {
global $db;
$q = $db->query("SELECT no, alt, isim, slug FROM kategori WHERE alt='".$alt_no."'");
list($no, $alt, $isim, $slug) = $q->fetch();
$arr[] = array($no, $alt, $isim, $slug);
// burada fonksiyon kendini çağırıyor. her kategorinin alt kategorisi varmı diye tekrar sorgulayacak. bütün kategorilere bakıldığında yani bakılacak başka kayıt kalmadığında fonksiyon otomatik olarak son bulacak.
kategori($alt);
}
// buradada sonuçları alalım. foreach gibi bir döngü içinde çıktılayabilirsin.
$arr = array();
$arr = kategori();
print_r($arr);Anlattıklarım işin mantığını anlaman için ve yazdığım kodlarıda aynı şekilde yazdım test etmedim çalıştırmadan direk yazıyorum sonuçta işin mantığını anlamak hazır kod almaktan daha önemli ama hazır kod istiyorum diyorsan google de ara mutlaka bulursun.