Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] números aleatorios no repetidos

Estas en el tema de números aleatorios no repetidos en el foro de PHP en Foros del Web. Hola, necesito insertar en mi base de datos mysql una cadena aleatoria que genero con una función, pero que mediante una consulta cheque si no ...
  #1 (permalink)  
Antiguo 19/10/2013, 00:08
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta números aleatorios no repetidos

Hola, necesito insertar en mi base de datos mysql una cadena aleatoria que genero con una función, pero que mediante una consulta cheque si no existe, en caso de que ya exista, que vuelva a correr la función, genere otra cadena aleatoria y lo vuelva a checar, hasta que no haya coincidencias y ya lo inserte en la base de datos.

Como lo puedo hacer?

Muchas gracias
  #2 (permalink)  
Antiguo 19/10/2013, 01:08
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: números aleatorios no repetidos

Haz un select antes de la inserccion y comprueba si devuelve registros, de todos modos, en mi opinion es una practica poco optima.

Otra opcion seria sacar previamente todos los registros y comprobarlos mediante php antes de insertarlo.
  #3 (permalink)  
Antiguo 19/10/2013, 06:53
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: números aleatorios no repetidos

Como dice bNd170 haz un select en la bd y lo guardas en un array, luego generas un numeto aleatorio, con in_array compruebas que no este en la bd y lo insertas, si esta generas otro ej:

Código PHP:
Ver original
  1. $sql="select camporand from tabla";
  2. $result=mysql_query($sql);
  3. while($row=mysql_fetch_row($result)){
  4. funcion_rand();
  5. if(in_array($valor_rand,$row)){//$valor_rand es lo que retorna la funcion funcion_rand()
  6. }
  7. }
  8. $sql="insert into bla bla";
Deberia ser algo asi
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #4 (permalink)  
Antiguo 19/10/2013, 07:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: números aleatorios no repetidos

Te hago una advertencia conveniente: Por cuestiones matemáticas algo largas de explicar, el tiempo de búsqueda de los números aleatorios irá creciendo en forma exponencial, por podría darse que en algún instante el sistema se ralentice hasta niveles muy elevados.
El uso de ese tipo de rutinas puede parecer ideal en el papel, pero cuando las implementas suelen causar efectos bastante llamativos.

Ver Wiki Generador de Números Aleatorios

El principio de lo que te describo es simple: A medida que vayas almacenando los números, la "ventana" de números aleatorios útiles se reduce, pero como el sistema puede seguir devolviendo números dentro del rango ya usado, el tiempo de búsqueda se va extendiendo.
En este sentido, los números aleatorios iniciales se obtienen rápido, pero a partir de cierto punto la búsqueda puede dispararse ...al infinito.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 19/10/2013 a las 07:32
  #5 (permalink)  
Antiguo 19/10/2013, 09:02
 
Fecha de Ingreso: noviembre-2008
Mensajes: 14
Antigüedad: 15 años, 5 meses
Puntos: 0
De acuerdo Respuesta: números aleatorios no repetidos

Cita:
Iniciado por SkAr88 Ver Mensaje
Como dice bNd170 haz un select en la bd y lo guardas en un array, luego generas un numeto aleatorio, con in_array compruebas que no este en la bd y lo insertas, si esta generas otro ej:

Código PHP:
Ver original
  1. $sql="select camporand from tabla";
  2. $result=mysql_query($sql);
  3. while($row=mysql_fetch_row($result)){
  4. funcion_rand();
  5. if(in_array($valor_rand,$row)){//$valor_rand es lo que retorna la funcion funcion_rand()
  6. }
  7. }
  8. $sql="insert into bla bla";
Deberia ser algo asi
Muchas gracias, no conocía in_array, lo hice así y me funciono a la perfección. Gracias bNd170 y SkAr88. gnzsoloyo voy a tomar muy en cuenta tu advertencia, muchas gracias.

Etiquetas: mysql, repetidos
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 16:00.