Prueba lo siguiente, no puedo tener una demo, por que no se como esta conformado tus tablas..
Código PHP:
<?php
//Sacar las categorias
$cat = mysql_query("SELECT * FROM cat_ad ORDER BY $cat_name") or die(mysql_error());
echo '
<table>
<tr>';
$i = 1; //Bandera
$columnas = 2;//Cantidad de columnas por fila
while($row_parent = mysql_fetch_array($cat)){
//Sacar las subcategorias
$subcat = mysql_query("SELECT * FROM sub_cat_ad WHERE from_cat_ad = '".$row_parent['idCat_ad']."'") or die(mysql_error());
$count = mysql_num_rows($subcat);
//Si no hay una relacion entre cat y sub cat imprimimos la categoria
if($count == 0)
{
echo "<td>
<h2><a href=\"#\">".htmlspecialchars($row_parent[$cat_name])."</a></h2>
</td>";
}else{
//Sino imprimimos las cat y sus subcat
echo "<td><h2>". htmlspecialchars($row_parent[$cat_name])."</h2></td>";
echo '<table>';//Creamos la tabla para la subcategoria
while($row_child = mysql_fetch_array($subcat))
{
echo "<tr><td><a href=\"#\">". htmlspecialchars($row_child[$subcatName])."</a></td></tr>";
} //end while subcat
//Cerramos la tabla creada
echo '</table>';
} //end if
$i++;//Aumentamos la Bandera
//Imprimimos la nueva categoria en otra fila si ya hay mas de 2 columnas
//Se hace columna + 1 por que de esta forma siempre mantiene 2, sino se le agrega la cantidad de columnas se
//desconfigura, porque, nose preguntenle a él xDDDDD
if ($i==$columnas+1)
{
echo "</tr><tr>";//Imprimimos la nueva fila cerrando la actual
$i=1;//igualamos la bandera a 1 para la siguiente fila
}
}//end while cat
echo '
</tr>
</table>';
?>
Es de probar a ver si te funciona, como dije, no tengo una demo para saber si funciona o no, pero en
teoria deberia de funcionar..
Pd.: debes ver la parte de Comilla simple y doble, por que habia algunos errores en este aspecto en tu codigo..