A occhio e croce, in SQL direi che non ce la fai.
Ti conviene fare una funzione PHP da chiamare in modo ricorsivo.
Una cosa del genere:
Codice PHP:
function leggi($conn,$id) {
$query = "SELECT COUNT(*) FROM sites WHERE ID_Cat = '$id'";
$res = mysql_query($query,$conn);
$r = mysql_fetch_row($res);
$num = $r[0];
$query = "SELECT ID_Cat FROM categories WHERE ID_UndCat = '$id'";
$res = mysql_query($query,$conn);
while ($row = mysql_fetch_row($res)) {
$num += leggi($conn,$row[0]);
}
}
$id = //id di partenza per la ricerca
$totale = leggi ($conn,$id);
prova...
(ovviamente $conn contiene la connessione al db, potresti anche non metterlo ma a me piace essere esplicito
)