Как делать неправильно
Например, вот так:
$res1 = mysql_query("SELECT id, name FROM rubs");
while ($row = mysql_fetch_row($res1))
$rub[$row[0]] = $row[1];
Из запроса получены имена рубрик и записаны в массив $rub.
$res2 = mysql_query("SELECT id, url, name, rub FROM sites WHERE какое-то-там-условие");
while ($row = mysql_fetch_array($res2)) {
echo "<a href=", $row["url"], ">", $row["name"], "</a>";
echo "(рубрика <a href=rub.phtml?id=", $row["id"], ">";
echo $rub[$row["rub"]], "</a><br>";
};
Теперь выбираются новости, и вместо выбранного номера рубрики вставляем соответствующий элемент массива рубрик.
На самом деле, можно избавить себя от необходимости тащить сквозь всю программу этот массив $rub (а если у нас к рубрикам обращаются функции - что, через GLOBAL брать?), от возможности ошибиться с $rub[$row["rub"]] - если на странице несколько подобных запросов, то сделать опечатку где-нибудь легко.
Кроме того, под массив $rub требуется некоторый объем памяти (а если рубрик много?). В третьей версии PHP такой скрипт будет выполняться дольше, чем при использовании объединений таблиц, потому что он интерпретирует программу построчно при выполнении (в отличие от 4-го, который компилирует программу и только потом выполняет).