Encontré este articulo:
http://dev.mysql.com/tech-resources/...ical-data.html
Y basado en el generé la consulta de la siguiente manera:
Código PHP:
function getRedReferidos($id_usuario){
$db = new db();
$query_join = "";
$query = "SELECT ";
for($c = 2; $c <= NIVELES; $c++){
$coma = ($c != NIVELES) ? "," : "";
$query .= ($c - 1) . " AS nivel, t" . $c . ".id, t" . $c . ".nombre, t" . $c . ".apellido, t" . $c . ".estado, t" . $c . ".patrocinador, t" . $c . ".email" . $coma;
$query_join .= " LEFT JOIN `usuarios` AS t" . $c . " ON t" . $c . ".patrocinador = t" . ($c - 1) . ".id ";
}
$query .= " FROM `usuarios` AS t1 ";
$query .= $query_join;
$query .= " WHERE t1.id = '" . $id_usuario . "';";
echo $query;
}
Lo que me genera esta consulta (con datos ficticios):
Código:
SELECT 1 AS nivel, t2.id, t2.nombre, t2.apellido, t2.estado, t2.patrocinador, t2.email, 2 AS nivel, t3.id, t3.nombre, t3.apellido, t3.estado, t3.patrocinador, t3.email FROM `usuarios` AS t1 LEFT JOIN `usuarios` AS t2 ON t2.patrocinador = t1.id LEFT JOIN `usuarios` AS t3 ON t3.patrocinador = t2.id WHERE t1.id = '1';
Y este es el resultado:
Con estos datos en la tabla de usuarios:
Y esta perfecto el tema es que estoy trayendo datos de mas por cada registro, o al menos podria cambiar un poco la generacion d ela consulta para organizar todo un poco mas.
EDITO y AGREGO: lo que necesitaria es 1 registro por cada usuario y que indique el nivel al que pertenece