Reiteración de un campo

Estoy trabajando en una página con php y MySQL (empezando). Tengo una tabla con nombres vulgares de plantas, nombres científicos y la zona donde se habla. Por medio de un formulario escribo el nombre científico y me salen los nombres vulgares con la zona donde se hablan. Pues aquí reside mi problema. La salida de datos es:
Clavel de pom Cataluña
Minutisa Cataluña
Ramilletes Cataluña
mauritânias portugués
Y yo quisiera que saliera:
Cataluña: clavel de pom, minutisa, ramilletes.
Portugal: mauritânias
Es decir que, por ejemplo, Cataluña saliera una vez y no volviera a salir otra zona hasta que sea diferente.
Mi código es este:
$result = mysql_query("SELECT IDIOMA,NOM_VER,ZONA FROM web_vulgares Where GENERO='".$gen."'
and ESPECIE IS NULL and INFRA IS NULL
ORDER BY IDIOMA,NOM_VER", $conexion);
$reg = mysql_numrows($result);
while($registro = mysql_fetch_assoc($result))
{
echo ("
<tr>
<td bordercolor=#FFFFFF><font face='Arial' size='2'>".$registro["NOM_VER"]."</font></td>
<td bordercolor=#FFFFFF><font face='Arial' size='2'>".$registro["IDIOMA"]." </font></td>
<td bordercolor=#FFFFFF><font face='Arial' size='2'>".$registro["ZONA"]." </font></td>
");
}
echo ("
</tr>
</table>
");
Muchas gracias por su interés. Un saludo.

1 respuesta

Respuesta
1
$result = mysql_query("SELECT IDIOMA,NOM_VER,ZONA FROM web_vulgares Where GENERO='".$gen."'
and ESPECIE IS NULL and INFRA IS NULL
ORDER BY IDIOMA,NOM_VER", $conexion);
$reg = mysql_numrows($result);
$zona = "";
while($registro = mysql_fetch_assoc($result))
{
if ($zona != $registro["ZONA"]) {
if ($zona != "")
  echo "</font></td>
</tr>
";
echo "
<tr>
<td bordercolor=#FFFFFF><font face='Arial' size='2'>".$registro["IDIOMA"]."</font></td>
<td bordercolor=#FFFFFF><font face='Arial' size='2'>";
echo $registro["NOM_VER"]." ";
}
echo ("
</td>
</tr>
</table>
");

No sé si he acertado con el nombre de los campos, porque aunque parece que escribes 3, sólo se ven dos y no sé cual es cual. Pero la idea ya la tienes ahí plasmada.
Muchas gracias por su respuesta, aunque creo que le faltan datos o yo no la entiendo:
El condicional
if ($zona != $registro["ZONA"]) {
¿Dónde cierra la llave?
La variable $zona ¿Dónde hacemos el echo para que salga :
Cataluña: Zanahoria de Juit, Zanahori, Zanahoria.
Portugal: mauritânias. maurinhas
Aragón: Zanahoria, Nabo rojo.
Juguemos con dos campos para simplificar el tema ZONA que en esta caso seria Cataluña que me saldría 3 veces, Portugal que saldría 2 veces y Aragón que me saldría otras dos. El otro campo sería el nombre vernáculo (NOM_VER). Es decir el listado de arriba es como quiero que me salga.
Cataluña Zanahoria de Juit
Cataluña Zanahori
Cataluña Zanahoria
Portugal mauritânias
Portugal maurinhas
Aragón Zanahoria
Aragón Nabo rojo
Y así es como me sale, repitiendo la zona.
Creo que ahora está clara la consulta. Lo siento si le confundí anteriormente.
De todas formas muchas gracias por su interés.
Tienes razón que faltaba un corchete de cierre. Quizás ahora quede más claro.
$result = mysql_query("SELECT IDIOMA,NOM_VER,ZONA FROM web_vulgares Where GENERO='".$gen."'
and ESPECIE IS NULL and INFRA IS NULL
ORDER BY IDIOMA,NOM_VER", $conexion);
$reg = mysql_numrows($result);
$zona = "";
while($registro = mysql_fetch_assoc($result))
{
if ($zona != $registro["ZONA"]) {
if ($zona != "")
echo "</font></td>
</tr>
";
echo "
<tr>
<td bordercolor=#FFFFFF><font face='Arial' size='2'>";
echo $registro["NOM_VER"]." ";
}
}
echo "
</td>
</tr>
</table>
";
Buenas David.
Ahora lo que no sale es la zona, cambie o no cambie, y es que no acabo de entender el script que escribes.
if ($zona != "")
Si la variable zona es distinto a nulo ¿qué? No abres llave para decir que es lo que tiene que hacer.
¿Dónde esta el echo para que salga $zona?
Yo lo he puesto:
echo $zona."; ".$registro["NOM_VER"]." ";
Y tampoco sale nada.
Muchas gracias por tu interés, y si no fuera mucho pedirte podrías comentar muy sucintamente el script para ver si logro enterarme. Perdona las molestias y te reitero mi agradecimiento por tu interés.
Intentaré aclararte el código. Tienes razón que me he liado con tus campos:
$result = mysql_query("SELECT IDIOMA,NOM_VER,ZONA FROM web_vulgares Where GENERO='".$gen."' and ESPECIE IS NULL and INFRA IS NULL ORDER BY IDIOMA, NOM_VER", $conexion);
$reg = mysql_numrows($result);
// Aquí inicializamos zona
$zona = "";
// Bucle para hacer un recorrido sobre el resultado
while($registro = mysql_fetch_assoc($result))
{
  // Como sólo queremos mostrar la zona una vez, estaremos atentos a si cambia
  // La primera vez seguro que cambia, puesto que el valor de inicialización está vacio y también cambiará cada vez que cambie la zona
  if ($zona != $registro["ZONA"]) {
   // La primera vez no hemos de hacer nada, pero las otras veces, debemos cerrar las etiquetas convenientemente. Es lo que hacemos. Como el if no lleva corchetes, sólo ejecutará la primera línea en caso de validar la condición a true.
    if ($zona != "")
        echo "</font></td>
</tr>
";   // Esta línea sólo se ejecuta si $zona no está vacía
    echo "
<tr>
<td bordercolor=#FFFFFF><font face='Arial' size='2'>";
    echo $registro["ZONA"] . "</td>
<td><font face='Arial' size='2'>";  // Mostramos la zona y empezamos la siguiente casilla
  }
  $zona = $registro["ZONA"];  // Actualizamos la zona actual
  echo $registro["NOM_VER"] . " ";  // Mostramos el nombre
}
// Cuando hemos acabado con todos los registros, cerramos la casilla y la tabla
echo "</font></td>
</tr>
</table>
";
! Ahora SI!
En primer lugar quiero agradecerte tu paciencia e interés en el tema.
En segundo lugar agradecerte tu altruismo
Y en tercero mil gracias por resolverme un tema que me traía de cabeza.
Si acaso tuvieras interés en conocer para que quería el script, no tienes nada más que escribirme y encantado te mandaría la dirección.
Repito y no me canso. Muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas