Foros del Web » Programando para Internet » PHP »

while

Estas en el tema de while en el foro de PHP en Foros del Web. He preparado un script en php con un while que muestra el contenido de una base de datos, pero esta tiene demasiado contenido y devuelve ...
  #1 (permalink)  
Antiguo 11/12/2009, 16:22
Avatar de chechu_  
Fecha de Ingreso: mayo-2007
Mensajes: 282
Antigüedad: 17 años, 6 meses
Puntos: 0
while

He preparado un script en php con un while que muestra el contenido de una base de datos, pero esta tiene demasiado contenido y devuelve error.
El script es este:

$Conetar = mysql_query('SELECT * FROM '.$nombre) ;

$i = '0';
$crear_array = array();
while($row = mysql_fetch_assoc($Conetar)) {
$crear_array[] = $row;
$i++;
}

Y $nombre contiene más de 50000 filas.
  #2 (permalink)  
Antiguo 11/12/2009, 16:27
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: while

Probablemente estes provocando un overflow de memoria o como se le quiera llamar. Crear un array con tanta cantidad de datos no es una manera optima para tratar los datos, para eso esta la potencia del MYSQL.

¿que quieres hacer con ese array de 50.000 nombres?
  #3 (permalink)  
Antiguo 11/12/2009, 16:33
Avatar de chechu_  
Fecha de Ingreso: mayo-2007
Mensajes: 282
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: while

Bueno, la idea era listarlos por paginas, pero para mostrar los que correspondan a cada página necesitaba verlos todos, o al menos era la forma en que había pensado.
Más o menos así.
Código PHP:
Ver original
  1. $i = '0';
  2. foreach($crear_array as $contenido => $row){
  3. if($i > $_GET['l'] and $i < $_GET['m']){
  4. echo $row['1'].'<br>';
  5. }
  6. $i++;
  7. }
  #4 (permalink)  
Antiguo 11/12/2009, 17:50
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: while

Lo ideal es pedir solo los datos justos que vamos a mostrar, si en una pagina vamos a mostrar los 100 primeros, pues pedimos esos 100 directamente con MYSQL

SELECT * from tabla ORDER BY nombre ASC LIMIT 0,100

Esto te seleccionaria los primeros 100 registros ordenados por el campo nombre de manera ascendente, y con LIMIT 0,100 hacemos que en vez de traernos los 50.000, nos traigamos los 100 empezando de 0 , es decir, los 100 primeros.

Si quieres los siguientes 100 de la lista, seria con:

SELECT * from tabla ORDER BY nombre ASC LIMIT 100,100


De este modo lo que tienes es que realizarte una paginacion tipica [1] [2] [3] [4] enciando por GET (desde la url) un valor que luego lo interprete en el limit

Por ejemplo en el enlace [1] seria a pagina.php?inicio=0, el enlace [2] seria a pagina.php?inicio=100, te hablo de la etiqueta <a href=.......> de HTML

Y luego en PHP con:

$Conetar = mysql_query('SELECT * FROM '.$nombre.' LIMIT '.$inicio.',100) ;


nos traemos los datos de la pagina clicada, espero no haberte liao mucho!
  #5 (permalink)  
Antiguo 11/12/2009, 18:50
Avatar de chechu_  
Fecha de Ingreso: mayo-2007
Mensajes: 282
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: while

Muchas gracias Vun, eso es justo lo que necesitaba
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 22:36.