Foros del Web » Programando para Internet » PHP »

¿Por qué esta consulta se ejecuta dos veces?

Estas en el tema de ¿Por qué esta consulta se ejecuta dos veces? en el foro de PHP en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <? //conexion //selecciono un usuario al azar $usuarioalazar = mysql_query ( "SELECT * FROM banco ORDER BY RAND() LIMIT ...
  #1 (permalink)  
Antiguo 28/03/2011, 20:06
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 17 años, 9 meses
Puntos: 0
¿Por qué esta consulta se ejecuta dos veces?

Código PHP:
Ver original
  1. <?
  2. //conexion
  3. //selecciono un usuario al azar
  4. $usuarioalazar = mysql_query("SELECT * FROM banco ORDER BY RAND() LIMIT 0 , 1");
  5. //pongo la fecha en una variable
  6. //si falla, me aviso con un mensaje privado
  7.  
  8. //primero abro el while para recopilar la info del usuario
  9.  
  10. while($informacion = mysql_fetch_array($usuarioalazar))
  11. {
  12.    
  13.     //le mando una notificacion al usuario para ver si quiere duplicar su saldo
  14. $aviso = mysql_query("INSERT INTO notificaciones (usuario,notificacion,estado) VALUES ('$informacion[usuario]','ganador_dia7','on')");
  15. //me mando un mp si no se envio la notificacion
  16. //si falla me aviso con un mp
  17. //agrego al usuario a la bd de ganadores
  18. //me aviso si no lo pude agregar
  19.  
  20. }
  21. ?>

Cuando ejecuto el código , luego voy a la BD y en la tabla notificaciones hay DOS registros insertados! No logro entender por qué
  #2 (permalink)  
Antiguo 28/03/2011, 21:01
Avatar de ylellan  
Fecha de Ingreso: mayo-2010
Ubicación: en un lugar de Veracruz
Mensajes: 432
Antigüedad: 14 años
Puntos: 36
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

corazon cuantos registros crees que da tu consulta, esa puede ser la razon

hay q ver:

Código PHP:
$nume=mysql_num_rows($usuarioalazar);
echo 
$nume;

//ahi veremos cuantas veces se puede ejecutar tu consulta 
besos
  #3 (permalink)  
Antiguo 28/03/2011, 21:01
Avatar de humbero12  
Fecha de Ingreso: abril-2009
Ubicación: Cereté, Colombia
Mensajes: 53
Antigüedad: 15 años
Puntos: 4
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

Intenta hacer un INSERT ... SELECT y solo que cuesta una linea
Código PHP:
Ver original
  1. mysql_query("INSERT INTO notificaciones(usuario,notificacion,estado) select usuario,'ganador_dia7','on' from banco order by RAND() LIMIT 0,1");

Espero que te funcione
__________________
Sigueme en twitter @humbero12
Blog #cazacontenidos
  #4 (permalink)  
Antiguo 28/03/2011, 21:35
 
Fecha de Ingreso: marzo-2011
Ubicación: Veracruz
Mensajes: 92
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

No pues al parecer esta bien, prueba poniendo solo LIMIT 1 en lugar de LIMIT 0,1
  #5 (permalink)  
Antiguo 28/03/2011, 21:53
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

te recomiendo que uses mysql_result en ves del while y el fecth_array para aegurarte que solo tendras un unico registro.

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #6 (permalink)  
Antiguo 28/03/2011, 22:07
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

La respuesta es mas de base de datos que de PHP como tal, el problema esta en como colocaste el LIMIT, ya que el LIMIT 0,1 estas diciendo que te devuelva los dos primeros valores del arreglo que recibe este, con solo colocar LIMIT 1, ahí estarías indicandole a MySQL que solo quieres un registro, usar o no el WHILE no deberia de afectar ya que si solo trae uno se va a quedar en uno,
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 29/03/2011, 08:17
Avatar de humbero12  
Fecha de Ingreso: abril-2009
Ubicación: Cereté, Colombia
Mensajes: 53
Antigüedad: 15 años
Puntos: 4
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

el limit 0,1 es equivalente a limit 1

La diferencia esta en lo siguiente:
limit 1 = muestra 1 registro y que inicie desde el primer registro
limit 0,1 = es lo mismo que el de arriba, pero cambia cuando le cambio el 0 (cero) me puedo mover por los registros pero solo mostrando 1 registro a la ves, si tengo limit 1,1 ya no estoy tomando el primer registro, sino el segundo pero sigo mostrando 1 solo registro.

Si estoy mal ley mal el manual de mysql
__________________
Sigueme en twitter @humbero12
Blog #cazacontenidos
  #8 (permalink)  
Antiguo 29/03/2011, 08:42
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 27
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

es sencillo solo lee la documentacion de php http://ar2.php.net/manual/es/functio...etch-array.php ahi te dice :

Valores devueltos
Devuelve un array de cadenas que corresponde a la fila recuperada, o FALSE si no hay más filas. El tipo del array retornado depende de como esté definido result_type. Mediante MYSQL_BOTH (predeterminado), se obtendrá un array con ambos índices: asociativos y numéricos. Usando MYSQL_ASSOC, se obtienen solo los índices asociativos (tal como funciona mysql_fetch_assoc()). Usando MYSQL_NUM, se obtienen solo los índices numéricos (tal como funciona mysql_fetch_row()

Te devuelve dos filas por cada registro en la base.
Asi que cambias la funcion o le pasa el para metro type.

Espero que te sirva suerte.

Última edición por luis010182; 29/03/2011 a las 09:07
  #9 (permalink)  
Antiguo 29/03/2011, 09:50
 
Fecha de Ingreso: marzo-2011
Ubicación: Veracruz
Mensajes: 92
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

Concuerdo con eits, si solo necesitas un registro pues no necesitas el while
  #10 (permalink)  
Antiguo 29/03/2011, 12:17
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: ¿Por qué esta consulta se ejecuta dos veces?

Muchas gracias a todos, voy a ver de que forma lo soluciono!

Etiquetas: Ninguno
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 10:11.