Просто потому, что запрос выполняется снова каждый раз, когда проверяется условие цикла.Это означает, что вы всегда будете получать один и тот же результат, если в то же время в базе данных что-то не изменится.
Вам нужно что-то вроде этого:
<?php
$res1 = mysql_query("SELECT * FROM table1");
while ($rowr = mysql_fetch_assoc($res1)) {
$res2 = mysql_query("SELECT * FROM table2 WHERE id = '".$rowr['uid']."'");
while($rowu = mysql_fetch_assoc($res2)){
$res3 = mysql_query("SELECT * FROM table3 WHERE id = '".$rowr['cid']."'");
while($rowc = mysql_fetch_assoc($res3)){
?>
<tr><td><?php echo $rowc['post']; ?></td><td><a href="other.php?id=<?php echo $rowu['id']; ?>"><?php echo $rowu['username']; ?></a></td><td><a href="this.php?p=d&i=<?php echo $rowr['id']; ?>"><font color="#FF0000">X</font></a></td></tr>
<?php
}
}
}
?>
Это просто для иллюстрации, почему это не такРабота.Как уже отмечали другие, было бы целесообразно объединить ваши запросы в один, используя JOIN .
Кстати, вам не нужно ;
после {}
блок.