SELECT *
FROM `bir` AS b
RIGHT JOIN bir AS c ON b.id = c.sub
 while($rows = $NEWS->fetch(PDO::FETCH_ASSOC)){
$all[$rows['sub']][$rows['id']]['title'] = $rows['title'];
}
foreach($all[0] as $id=>$text){
	
$kategoriler[$id]['id'] = $id;	
$kategoriler[$id]['title'] = $text['title'];

foreach($all[$id] as $aid=>$atext){
$kategoriler[$id]['alt_kategori'][$aid]['id'] = $aid;
$kategoriler[$id]['alt_kategori'][$aid]['title'] = $atext['title'];
}

}
print_r($kategoriler);
echo json_encode($kategoriler);
test etmedim yüksek olasılıkla sizin json'ın kategorilerden aşağısını verecek. denersiniz

kolaylıklar.