Foros del Web » Programando para Internet » PHP »

while se para

Estas en el tema de while se para en el foro de PHP en Foros del Web. Tengo un problema, realizo una consulta de unos usuarios pero esos usuarios tienen otros datos alojados en otra tabla entonces le digo que si no ...
  #1 (permalink)  
Antiguo 22/03/2012, 16:23
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años, 7 meses
Puntos: 0
Exclamación while se para

Tengo un problema, realizo una consulta de unos usuarios pero esos usuarios tienen otros datos alojados en otra tabla
entonces le digo que si no cumple un requisito no lo muestre pero al hacer la consulta me muestra todos hasta que llega el que no cumple el requisito y entonces no continua la consulta.
Tendria que mostrar 10 resultados pero siempre se para a 4 o 5 por que ahi sale uno que no cumple.


Código PHP:
$busca=mysql_query("SELECT * FROM usuarios ORDER BY RAND()  LIMIT 0,10;");

while (
$dat=mysql_fetch_array($busca)){    


$result=mysql_query("SELECT * FROM ".$dat["articulos"]." ",$conexion); 
if (
$fil=mysql_fetch_array($result)){ }

$numero mysql_num_rows($result);
if (
$numero 15){

aqui se mostraria


  #2 (permalink)  
Antiguo 22/03/2012, 16:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: while se para

Pon el código tal cual lo usas, ¿como estas brincando al que no cumple? ¿haces un break;?
  #3 (permalink)  
Antiguo 22/03/2012, 16:30
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: while se para

No hago ningun break....ya que aun no domino php al 100%
como se usaria?
  #4 (permalink)  
Antiguo 22/03/2012, 16:34
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: while se para

hola

no entiendo una parte, la segunda consulta en el nombre de la tabla a la cual le haces el select es el valor que trae la primera consulta ????????

me podrias explicar un poco mas detallado
  #5 (permalink)  
Antiguo 22/03/2012, 16:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: while se para

Deberías de poner el código completo de tu while como lo usas para que podamos ver porque se "para".

Saludos.
  #6 (permalink)  
Antiguo 22/03/2012, 16:36
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: while se para

Tengo una tabla donde esta los usuarios y otra donde esos usuarios alojan sus artículos entonces quiero realizar la consulta pero no mostrar los usuarios que tengan menos de 15 artículos.
  #7 (permalink)  
Antiguo 22/03/2012, 16:39
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: while se para

ok listo...

perfecto entonces indicanos que campo se relacionan con las dos tablas, y muestra tu codigo

para poderte ayudar mejor
  #8 (permalink)  
Antiguo 22/03/2012, 16:42
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: while se para

Aqui esta el codigo

Código PHP:

$busca
=mysql_query("SELECT * FROM usuarios ORDER BY RAND()  LIMIT 0,10;",$conexion);

while (
$dat=mysql_fetch_array($busca)){    


$result=mysql_query("SELECT * FROM ".$dat["articulosusuario"]." ",$conexion); 
if (
$fil=mysql_fetch_array($result)){ }

$numero mysql_num_rows($result);
if (
$numero 15){


$resultado=mysql_query("SELECT  * FROM usuarios WHERE nombre = '".$fil["nombre"]."'   ",$conexion);
if (
$final=mysql_fetch_array($resultado)){    }

echo 
$final["nombre"];

}  


  #9 (permalink)  
Antiguo 22/03/2012, 16:54
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: while se para

ok pero sigo con mi duda respecto a la segunda consulta

$result=mysql_query("SELECT * FROM ".$dat["articulosusuario"]." ",$conexion);

esa linea creeria que esta mal porque supongo que tu tabla se debe llamar algo asi como articulos cierto y pasarle la condicion entonces te voy a corregir y si algo me cuentas

Código PHP:
Ver original
  1. $busca=mysql_query("SELECT * FROM usuarios ORDER BY RAND()  LIMIT 0,10;",$conexion);
  2.  
  3. while ($dat=mysql_fetch_array($busca)){    
  4.  
  5.  
  6. $result=mysql_query("SELECT * FROM articulos WHERE usuario = '".$dat["articulosusuario"]." '    ",$conexion);
  7. $numero = mysql_num_rows($result);
  8. $reg_articulo = mysql_fetch_array($result);
  9.  
  10.  
  11.             if ($numero > 15){
  12.  
  13.  
  14.                    // imprimes los datos
  15.                echo $dat["nombre_usuario"] . " mis articulos " .$reg_articulo["nombre_articulo"]."<br/>";
  16.  
  17.            }  
  18.  
  19. }

es una idea, espero y te guies..... el nombre de los campos que llamo en el recorrido son ficticios..
  #10 (permalink)  
Antiguo 22/03/2012, 17:02
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: while se para

Lo explico mejor quiza lo lie un poco




Código PHP:

//selecciono 10 usuarios al azar entre todos
$busca=mysql_query("SELECT * FROM usuarios ORDER BY RAND()  LIMIT 0,10;",$conexion);

//hago un while para que me muestre los 10 usuarios
while ($dat=mysql_fetch_array($busca)){    

//los usuarios tienen una tabla creada con su nombre donde almacenan sus
//articulos entonces entro a su tabla y cuento cuantos articulos tiene en total
$result=mysql_query("SELECT * FROM ".$dat["usuario"]." ",$conexion); 
if (
$fil=mysql_fetch_array($result)){ }

//cuento los articulos y miro si tiene mas de 15
$numero mysql_num_rows($result);
if (
$numero 15){

//si el usuario tiene mas de 15 entonces muestro los datos que necesite mostrar de ese usuario
$resultado=mysql_query("SELECT  * FROM usuarios WHERE nombre = '".$fil["nombre"]."'   ",$conexion);
if (
$final=mysql_fetch_array($resultado)){    }

echo 
$final["nombre"];

}  


Espero explicarme bien
  #11 (permalink)  
Antiguo 22/03/2012, 17:09
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: while se para

ok te entiendo

pero no necesitas volver hacer la consulta para traer los datos del usuario si ya lo tienes en el primero recorrido..

ves.. entonces cuando entra a validar simplemente el te mostrara los datos del usuario que cumplan la condicion...
  #12 (permalink)  
Antiguo 22/03/2012, 17:11
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: while se para

...Quite la segunda consulta pero pasa lo mismo.....muestra los datos hasta que llega a uno que no los cumple y se para.
  #13 (permalink)  
Antiguo 22/03/2012, 17:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: while se para

Bueno aparte de que es una pésima idea tener una tabla por cada usuario, es mejor si usas COUNT() para contar las filas:

Código PHP:
Ver original
  1. $busca=mysql_query("SELECT * FROM usuarios ORDER BY RAND()  LIMIT 0,10;",$conexion);
  2. while ($dat=mysql_fetch_array($busca)) {    
  3.     $result=mysql_query("SELECT COUNT(*) FROM ".$dat["usuario"],$conexion);
  4.     $totalarr = mysql_fetch_num($result);
  5.     $total = $totalarr[0];
  6.     if ($total > 15) {
  7.         // No es necesario volver a enviar otro query, ya tienes toda la información en $dat
  8.         echo $dat['nombre'];
  9.     }
  10. }

Saludos.
  #14 (permalink)  
Antiguo 22/03/2012, 17:26
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: while se para

me da error

Fatal error: Call to undefined function mysql_fetch_num()
  #15 (permalink)  
Antiguo 22/03/2012, 17:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: while se para

Perdón debes de usar mysql_fetch_row() en lugar de mysql_fetch_num().

Saludos.
  #16 (permalink)  
Antiguo 23/03/2012, 02:35
Avatar de alfoner  
Fecha de Ingreso: abril-2009
Mensajes: 146
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: while se para

Gracias...pero continua parandose
  #17 (permalink)  
Antiguo 23/03/2012, 09:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: while se para

No debería, probé el código usando datos ficticios y recorre correctamente, ¿estas seguro que ese es todo el código que tienes?

Etiquetas: mysql, sql, tabla, usuarios
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




La zona horaria es GMT -6. Ahora son las 21:30.