Foros del Web » Programando para Internet » PHP »

[DUDA] tomar numeros ID aleatorios de una base de datos

Estas en el tema de [DUDA] tomar numeros ID aleatorios de una base de datos en el foro de PHP en Foros del Web. Hola a todos estoy haciendo un sistema PHP MySQL en el cual tengo campos con ID autoincrementable, donde si borro un campo este no se ...
  #1 (permalink)  
Antiguo 22/06/2009, 15:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 112
Antigüedad: 15 años, 7 meses
Puntos: 1
[DUDA] tomar numeros ID aleatorios de una base de datos

Hola a todos estoy haciendo un sistema PHP MySQL en el cual tengo campos con ID autoincrementable, donde si borro un campo este no se vuelve a llenar es decir si tengo los campos 1, 2 y 3 y agrego otro item este va a tener el ID 4, pero si por ejemplo yo borro el item con ID 2, y creo otro item este va a tener el ID 5 y el 2 no se volvera a ocupar.

Entonces... yo necesito mostrar en la pagina principal 4 o 6 items en la pagina principal de mi web, y pense hacerlo haciendo un RANDOM es decir primero contar cuantos items tengo y luego seleccionar nuemros al random dentro de ese total.

pero pensando creo que esto me va a dar 2 problemas.

El primero es que si justo en el numero al azar sale un ID de un item que yo borre este no va a existir y me va a dar error.

Y el segundo problema es que cabe la posibilidad que me toquen numeros repetidos y de esta manera muestre 2 items iguales en la pagina principal.

Alguuno sabe como puedo proceder para hacer esto que necesito bien??

Saludos.
  #2 (permalink)  
Antiguo 22/06/2009, 15:29
Avatar de ACX_POISON  
Fecha de Ingreso: abril-2008
Ubicación: Talca-Chile
Mensajes: 750
Antigüedad: 16 años
Puntos: 7
Respuesta: [DUDA] tomar numeros ID aleatorios de una base de datos

mmm... podrias llenar un array con todos los id que tengas seleccionandolos de una consulta y luego generar un numero aleatorio y utilizar ese aleatorio como la clave del array para obtener en id de esa posicion algo asi

Código PHP:
$ID_vector//suponiendo que contiene los todo los id (1=>1,2=>2,3=>5,4=>6...etc...);
$num_ids=count($ID_vector);//numero de id's

$aleatorio=rand(0,num_ids-1);//obtenemos un aleatorio

$id_aleatorio=$ID_vector[$aleatorio]; //utilizamos ese num aleatorio para obtener el id de esa posicion 
__________________
Me junto con los que Saben, Queriendo Saber.
  #3 (permalink)  
Antiguo 22/06/2009, 15:36
 
Fecha de Ingreso: octubre-2008
Mensajes: 112
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: [DUDA] tomar numeros ID aleatorios de una base de datos

interesante, pero simplemente hago una consulta si en algun momento supero los 1000 articulos la consulta para llenar el Array no demorara mucho???

si la respuesta es no perfecto y me solucionaste el problema

Muchas gracias POISON
  #4 (permalink)  
Antiguo 22/06/2009, 15:42
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: [DUDA] tomar numeros ID aleatorios de una base de datos

Puedes hacerlo desde la misma consulta:

SELECT * FROM tabla ORDER BY RAND() LIMIT 4

El ORDER BY RAND() LIMIT 4 es el que hace la magia, ordena los registros aleatoriamente y solamente trae 4 (o el numero que desees).

Ahora solo tienes que iterar como lo harias con una consulta normal.
  #5 (permalink)  
Antiguo 22/06/2009, 15:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 112
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: [DUDA] tomar numeros ID aleatorios de una base de datos

ahi me gusto mas.

Muchas gracias ronruby gracias a los 2 por sus respuestas
  #6 (permalink)  
Antiguo 22/06/2009, 15:54
Avatar de ACX_POISON  
Fecha de Ingreso: abril-2008
Ubicación: Talca-Chile
Mensajes: 750
Antigüedad: 16 años
Puntos: 7
Respuesta: [DUDA] tomar numeros ID aleatorios de una base de datos

si a mi tambien...
__________________
Me junto con los que Saben, Queriendo Saber.
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 12:52.