Tratar de hacer un índice de árbol con php y tabla
Después de estar varias semanas pensando en resolver el problema y no encontrarle solución, recurro a ti para ver si me puedes echar una mano.
Paso a exponerte el problema.
Tengo una tabla con muchos registros sobre nombres de plantas, la tabla tiene más o menos la siguiente estructura:
-----------------------------------------------------------------------------
| GENERO | ESPECIE | INFRANK | INFRA| AUTABRE | PAGINAS |
-----------------------------------------------------------------------------
| Rosa | | | | L. | 116, 210|
-----------------------------------------------------------------------------
| Rosa | canina | | | Herr. | 115, 200|
-----------------------------------------------------------------------------
| Rosa | canina | subsp. |Lutea | Willk. | 115, 200|
-----------------------------------------------------------------------------
| Rosa | Lutea | | | L. | 5 |
-----------------------------------------------------------------------------
| Rubus | | | | Boiss. | 116 |
-----------------------------------------------------------------------------
| Rubus | mayor | | | Reaj . | 115, 200|
-----------------------------------------------------------------------------
| Rubus | mayor | var. |Lutea | Willk. | 115, 200|
-----------------------------------------------------------------------------
| Rubus | alba | | | Aedo | 8 |
-----------------------------------------------------------------------------
|Veronica| | | | Mall. | 116, 210|
-----------------------------------------------------------------------------
|Veronica| minor | | | Willk. | 115, 200|
-----------------------------------------------------------------------------
|Veronica|vulgare | | | L. | 1, 8 |
-----------------------------------------------------------------------------
Bien. La forma que desearía que saliera sería:
Rosa L., 116, 210
Canina herr., 115, 200
Subsp. Lutea Willk., 115, 200
Lútea
Rubus Boiss., 116
Alba Aedo, 8
Mayor Reaj., 115, 200
var. Lutea Willk., 115, 200
Verónica Mall., 116, 210
Minor Willk., 115, 200
vulgare L., 1, 8
Es decir el campo GENERO que solo salga una vez si se repite con su autor y página
El campo ESPECIE solo una vez también y con un sangrado.
El campo INFRANK + INFRA con un doble sangrado sin que salga la ESPECIE y debajo de su ESPECIE.
Cada uno con su AUTABRE y su PÁGINAS.
En realidad es un índice que necesito sacar de una gran tabla de plantas y preciso que sea lo más claro posible.
Te estaría muy agradecido si me pudieras echar un mano.
El código que yo tengo es (No funciona):
$sql = mysql_query("SELECT GENERO FROM indice GROUP BY GENERO", $conexion);
while($plantas = mysql_fetch_assoc($sql))
{
$genero = $plantas['GENERO'];
$sql2 = mysql_query("SELECT ESPECIE FROM indice WHERE GENERO = ".$genero." GROUP BY ESPECIE", $conexion);
echo $genero."<br/>";
while($generos = mysql_fetch_assoc($sql))
{
$especie = $generos['GENERO'];
$sql3 = mysql_query("SELECT * FROM indice WHERE GENERO = $especie", $conexion);
while($especies = mysql_fetch_array($sql3))
{
echo $genero.$especies["ESPECIE"]."<BR/>";
}
}
}
Paso a exponerte el problema.
Tengo una tabla con muchos registros sobre nombres de plantas, la tabla tiene más o menos la siguiente estructura:
-----------------------------------------------------------------------------
| GENERO | ESPECIE | INFRANK | INFRA| AUTABRE | PAGINAS |
-----------------------------------------------------------------------------
| Rosa | | | | L. | 116, 210|
-----------------------------------------------------------------------------
| Rosa | canina | | | Herr. | 115, 200|
-----------------------------------------------------------------------------
| Rosa | canina | subsp. |Lutea | Willk. | 115, 200|
-----------------------------------------------------------------------------
| Rosa | Lutea | | | L. | 5 |
-----------------------------------------------------------------------------
| Rubus | | | | Boiss. | 116 |
-----------------------------------------------------------------------------
| Rubus | mayor | | | Reaj . | 115, 200|
-----------------------------------------------------------------------------
| Rubus | mayor | var. |Lutea | Willk. | 115, 200|
-----------------------------------------------------------------------------
| Rubus | alba | | | Aedo | 8 |
-----------------------------------------------------------------------------
|Veronica| | | | Mall. | 116, 210|
-----------------------------------------------------------------------------
|Veronica| minor | | | Willk. | 115, 200|
-----------------------------------------------------------------------------
|Veronica|vulgare | | | L. | 1, 8 |
-----------------------------------------------------------------------------
Bien. La forma que desearía que saliera sería:
Rosa L., 116, 210
Canina herr., 115, 200
Subsp. Lutea Willk., 115, 200
Lútea
Rubus Boiss., 116
Alba Aedo, 8
Mayor Reaj., 115, 200
var. Lutea Willk., 115, 200
Verónica Mall., 116, 210
Minor Willk., 115, 200
vulgare L., 1, 8
Es decir el campo GENERO que solo salga una vez si se repite con su autor y página
El campo ESPECIE solo una vez también y con un sangrado.
El campo INFRANK + INFRA con un doble sangrado sin que salga la ESPECIE y debajo de su ESPECIE.
Cada uno con su AUTABRE y su PÁGINAS.
En realidad es un índice que necesito sacar de una gran tabla de plantas y preciso que sea lo más claro posible.
Te estaría muy agradecido si me pudieras echar un mano.
El código que yo tengo es (No funciona):
$sql = mysql_query("SELECT GENERO FROM indice GROUP BY GENERO", $conexion);
while($plantas = mysql_fetch_assoc($sql))
{
$genero = $plantas['GENERO'];
$sql2 = mysql_query("SELECT ESPECIE FROM indice WHERE GENERO = ".$genero." GROUP BY ESPECIE", $conexion);
echo $genero."<br/>";
while($generos = mysql_fetch_assoc($sql))
{
$especie = $generos['GENERO'];
$sql3 = mysql_query("SELECT * FROM indice WHERE GENERO = $especie", $conexion);
while($especies = mysql_fetch_array($sql3))
{
echo $genero.$especies["ESPECIE"]."<BR/>";
}
}
}
Respuesta de Chari Saiz
1