Foros del Web » Programando para Internet » PHP »

Duda al leer los resultados de una consulta

Estas en el tema de Duda al leer los resultados de una consulta en el foro de PHP en Foros del Web. Hola a todos, les escribo porque ya me desespere un poco con un programita que me ha traido algunos problemas. Lo que pasa es que ...
  #1 (permalink)  
Antiguo 10/02/2004, 11:32
Avatar de elmasca  
Fecha de Ingreso: enero-2004
Ubicación: Mexico
Mensajes: 108
Antigüedad: 20 años, 2 meses
Puntos: 0
Duda al leer los resultados de una consulta

Hola a todos, les escribo porque ya me desespere un poco con un programita que me ha traido algunos problemas. Lo que pasa es que yo hago una consulta de todos los registros que hay en mi base de datos para desplegarlos en forma alfabetica con un diseño que me dijieron que hiciera en una tabla, este es un ejemplo de mi codigo:

$sql="SELECT *FROM revistas";
$result=mysql_query($sql,$link);

echo "<table>";

//Estas ciclo es para sacar todas las letras (A-Z)
for($i=65;$i<=90;$i++)
{
$car=chr($i);
//imprimo la letra correspondiente en una celda
echo "<tr>";
echo "<td colspan='3' align='center'>".$car."</td>";
echo "</tr>";
//Leo los registros
while($row=mysql_fetch_array($result))
{
//Saco la primer letra del campo nombre para compararla
$letra=strtoupper(substr($row["nombre"],0,1));
if($letra==$car) {
echo "<tr>";
echo "<td>".$row["nombre"]."</td>";
echo "</tr>";
//Para no poner todos, aqui imprimo los otros campos
}

}//fin del while
}//fin del for

echo </table>;

Ahora solamente entra al while una vez y las demas no como le hago para que vuelva a entrar al while????, porque si entiendo que en la primer entrada llega al fin de los registros y creo que el puntero se quedo al final de este y pues no entra al while otra vez, como le puedo hacer??

Espero que le hayan entendido al codigo, porque lo puse muy sencillo..

De ante mano gracias si es que me pueden ayudar...
__________________
"El conocimiento se debe de compartir"
  #2 (permalink)  
Antiguo 10/02/2004, 12:48
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Tienes razon, en la primera iteracion del for ejecuta todos los ciclos del while y deja el puntero al final.

Para posicionar el puntero en el primer registro, puedes usar la funcion mysql_data_seek() (www.php.net/mysql_data_seek).

Suerte.

PD: TAmbien podrias cambiar el algoritmo, haciendo que la consulta este ordenada e ir mostrando los resultados con un solo while.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 10/02/2004, 13:09
Avatar de elmasca  
Fecha de Ingreso: enero-2004
Ubicación: Mexico
Mensajes: 108
Antigüedad: 20 años, 2 meses
Puntos: 0
Oye muchas gracias carnal creo que si checare esa funcion y ver si esa es mi solucion. Por otro lado si hago el ordenamiento en mi consulta solo que me falto ponerlo aqui jejejeje, y lo que trato de hacer con esto es que antes de los registros correspondientes a cada letra les pongo una celda como si fuera la letra el encabezado por eso tuve que hacer este algoritmo, si no como dices tu solo con el ordenamiento y ocupando solo el while. No se si me entendiste como quiero hacer esto.

----------------------------------------------------------------------------
A
----------------------------------------------------------------------------
American Journal Proquest 2002- Sin acceso
----------------------------------------------------------------------------
Annual of chemycal Ebsco 1999- Gratis
----------------------------------------------------------------------------
B
----------------------------------------------------------------------------
Bacterias IMTA 2002- Gratis
----------------------------------------------------------------------------

Bueno asi sucesivamente, pero si tienes una mejor idea de como hacer esto te agradeceria tu comentario....

Muchas Gracias
__________________
"El conocimiento se debe de compartir"
  #4 (permalink)  
Antiguo 10/02/2004, 14:09
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, asi de cabeza se me ocurre:
Código PHP:
echo "A<br>";  // cabecera para A
$letra_actual=65;
while(
$row=mysql_fetch_Array($result)) {
  
$reg_actual=strtoupper(substr($row["nombre"],0,1));  // letra del registro actual

  
if ($reg_actual!=$letra_actual) {
    for (
$i=$letra_actual+1;$i<=$reg_actual;$i++) {
      echo 
$i.'<br>';  // las distintas cabeceras
    
}
    
$letra_actual=$reg_actual;
  }

  echo 
$row['nombre'];  // y el resto de campos del registro.
}
if (
90!=$letra_actual) {
// para mostrar hasta la Z
  
for ($i=$letra_actual;$i<=90;$i++) {
    echo 
$i.'<br>';  // las distintas cabeceras
  
}

No lo he probado, asi que puede fallar por todos sitios.

La teoria es almacenar 2 "punteros", uno con la letra mostrada en el titulo (A-Z) que se ha mostrado el ultimo, y otro con la letra del registro actual. Si no coinciden, se muestran los titulos desde la siguiente a la ultimo titulo mostrado, hasta el actual del registro. Y se iguala los dos valores. Asi el siguiente registro coincide con el ultimo titulo y no se muestran mas titulos. Y al final se muestran los titulos que van despues del ultimo registro.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:47.