Por si a alguien le sirve, he depurado un poco más el sistema y funciona perfectamente para categorias infinitas...
Código PHP:
class categories{
var $table = "";
var $id = "";
var $name = "";
var $previus = "";
//Listamos las categorias raiz
function parentCategories($mysql){
$sqlCategory = $mysql->query("SELECT ".$this->id.", ".$this->name." FROM ".$this->table." WHERE ".$this->previus." = '0' ORDER BY name ASC");
while($category = $mysql->f_obj($sqlCategory)){
print "<div>".$category->name."</div>";
$this->childrenCategories($mysql, $category->id, $category->name." -> ");
}
$mysql->free_sql($sqlCategory);
}
//Comprobamos si tienen subcategorias
function childrenCategories($mysql, $prer, $parent){
$sqlCategory = $mysql->query("SELECT ".$this->id.", ".$this->name." FROM ".$this->table." WHERE ".$this->previus." = '".$pre."' ORDER BY name ASC");
while($category = $mysql->f_obj($sqlCategory)){
print "<div>".$parent.$category->name."</div>";
$parent .= $category->name." -> ";
$this->childrenCategories($mysql, $category->id, $parent);
}
$mysql->free_sql($sqlCategory);
}
}
Matizo, que la conexion a mysql la hago desde una clase, que eso se puede cambiar...