Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Obtener 6 registros aleatorios

Estas en el tema de Obtener 6 registros aleatorios en el foro de Mysql en Foros del Web. Hola, tengo una consulta, deseo obtener de una tabla, 6 registros de una DB de manera aleatoria, cada registro esta asociado a una imagen. Alguna ...
  #1 (permalink)  
Antiguo 23/03/2006, 11:32
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 3 meses
Puntos: 1
Obtener 6 registros aleatorios

Hola, tengo una consulta, deseo obtener de una tabla, 6 registros de una DB de manera aleatoria, cada registro esta asociado a una imagen.
Alguna idea?? Gracias
__________________
:adios:
  #2 (permalink)  
Antiguo 24/03/2006, 21:43
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
si quieres obtener registros aleatorios puedes usar la funcion rand().

por ejemplo:
Código:
select *
from tabla
order by rand()
limit 6
te devolvera 6 registros tomados al azar de la tabla.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #3 (permalink)  
Antiguo 24/03/2006, 21:52
Avatar de sam
sam
 
Fecha de Ingreso: agosto-2001
Ubicación: Aguascalientes, México.
Mensajes: 572
Antigüedad: 22 años, 8 meses
Puntos: 2
Cita:
Iniciado por haron
si quieres obtener registros aleatorios puedes usar la funcion rand().

por ejemplo:
Código:
select *
from tabla
order by rand()
limit 6
te devolvera 6 registros tomados al azar de la tabla.
hola, bueno, hace tiempo postie (o postee no se como se diga jeje) un mensaje en el que tenia una duda de como seleccionar los primeros "n" resultados de una consulta, aqui esta el post: http://www.forosdelweb.com/f86/seleccionar-primeros-n-registros-consulta-379041/

y bueno, no recibi ni una respuesta . Y me ahora checando este post, me fije en el codigo que pusiste haron, y me preguntaba si el modificador "limit" me serviria para eso??, bueno, espero tu respuesta o la de alguien mas, saludos
__________________
El que tiene voluntad de aprender, encontrará siempre un maestro...
Proverbio Aleman
  #4 (permalink)  
Antiguo 24/03/2006, 22:56
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
si, claro que te puede servir.

para los 25 primeros resultados
Código:
select id, nombre
from mi_tabla
order by id
limit 0, 25
para los 25 siguientes
Código:
select id, nombre
from mi_tabla
order by id
limit 25, 50
etc... etc... el primer parametro del limit indica la posicion desde la que empieza a mostrar los registros y el segundo parametro el numero de registros que debe traer.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #5 (permalink)  
Antiguo 25/03/2006, 00:01
Avatar de sam
sam
 
Fecha de Ingreso: agosto-2001
Ubicación: Aguascalientes, México.
Mensajes: 572
Antigüedad: 22 años, 8 meses
Puntos: 2
Gracias haron, bueno, tengo otra duda, no se si me podrias ayudar, bueno, resulta que eso de los primeros registros y luego los otros 50... es para un sistema que estoy haciendo, en el cual se deben imprimir unos "dictamenes" o reportes, los cuales vienen en formatos oficiales y pues tienen que ir impresos ahi.
Bueno, resulta que dichos formatos se componen de dos hojas, en la principal van los primeros 50 registros, 25 a la izquierda y 25 a la derecha (para eso era lo de los primeros 25 y los siguientes 25), las siguentes hojas, van de 50 en 50 hasta que se terminan.

Bueno, hasta ahi todo bien, y me sirvio mucho tu respuesta, ahora, resulta que hay 2 tipos diferentes de formatos, lo unico que varia es el orden o la forma en la que estan acomodados los registros en la primer pagina, de la siguiente manera:

Un formato viene asi:

1 ---------- 25
2 ---------- 26
3 ---------- 27
. .
. .
. .
24 ---------- 50

Mientras que el otro viene asi:

1 ---------- 2
3 ---------- 4
5 ---------- 6
...... 50

Entonces aqui es donde surge mi nueva duda :
Sera posible tomar los registros de 1 si y 1 no?, me refiero a hacer dos consultas en la que la primera arroje los registros 1,3,5,7... y la segunda los registros 2,4,6,8...???

Bueno, se que suena medio raro, pero es lo que necesito hacer, me gustaria saber si existe alguna forma de hacerlo directamente en la consulta SQL o si lo tendre que hacer a pie, o sea, programarlo yo en mi aplicacion.

Bueno, espero que no te haya aburrido con tanto choro y espero que me puedas ayudar.

Saludos xD y gracias de antemano
__________________
El que tiene voluntad de aprender, encontrará siempre un maestro...
Proverbio Aleman

Última edición por sam; 25/03/2006 a las 00:07
  #6 (permalink)  
Antiguo 25/03/2006, 08:13
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
creo que lo mas razonable seria lanzar la consulta guardar los datos en un array y luego presentar esos datos como te piden.

puedes lanzar la consulta usando el "limit 1, 50" y luego, con dos bucles "for" recorrer la primera vez los impares y luego los pares.

seria algo asi:
Código:
// script en PHP
// muestra solo los pares
for ($i = 0; $i < 50; $i = $i + 2) {
  echo $row[$i];
}

// muestra solo los impares
for ($i = 1; $i < 50; $i = $i + 2) {
  echo $row[$i];
}
en la variable "$row" hemos guardado previamente los registros devueltos por la consulta (mas o menos por ahi van los tiros)
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #7 (permalink)  
Antiguo 25/03/2006, 11:54
Avatar de sam
sam
 
Fecha de Ingreso: agosto-2001
Ubicación: Aguascalientes, México.
Mensajes: 572
Antigüedad: 22 años, 8 meses
Puntos: 2
Pues gracias nuevamente, en realidad si tenia pensado hacerlo mas o menos asi, (solo que en c++), de todos modos muchas gracias, me sirvio mucho tu ayuda. xD
__________________
El que tiene voluntad de aprender, encontrará siempre un maestro...
Proverbio Aleman
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 22:01.