istediğini yanlış anlamadıysam eğer şu şekilde yapabilirsin:
<?php
$sor = mysql_query('SELECT * FROM kategori');
$kategoriler = '<ul><li><a href="index.php">ANASAYFA</a></li>'."\r\n";
while($yaz = mysql_fetch_array($sor)){
$kadi = $yaz['kategoriad'];
$kadi2=str_replace(' ','_',$kadi);
$id = $yaz['id'];
$sonuc = mysql_query('SELECT count(*) FROM yazilar where kategori="'.$id.'" ORDER BY id DESC');
$satir = mysql_fetch_array($sonuc);
$kategoriler .= '<li><a href="kategori.php?id='.$id.'-'.$kadi2.'.html">'.$kadi.'</a> ['.$satir[0].']</li>'."\r\n";
}
$kategoriler .= '</ul>';
echo $kategoriler;
?>ama bu şekilde döngüye alıp tekrar tekrar sorgu yapacağına, left join vs. ile tek sorguda alman daha akıllıca olur.