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.