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

Qué hay mal en este Select?

Estas en el tema de Qué hay mal en este Select? en el foro de Mysql en Foros del Web. Cita: "SELECT DISTINCT art,img FROM fotos ORDER BY RAND() LIMIT 0, 10"; Pretendo que coja algunas fotos, pero sin repetir art (es un numero), y ...
  #1 (permalink)  
Antiguo 02/09/2008, 13:40
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Qué hay mal en este Select?

Cita:
"SELECT DISTINCT art,img FROM fotos ORDER BY RAND() LIMIT 0, 10";
Pretendo que coja algunas fotos, pero sin repetir art (es un numero), y que los seleccione aleatoriamente... Pero nada, se generan aleatoriamente pero repitiendo art...
  #2 (permalink)  
Antiguo 02/09/2008, 13:58
 
Fecha de Ingreso: abril-2001
Mensajes: 293
Antigüedad: 23 años
Puntos: 0
Respuesta: Qué hay mal en este Select?

No he usado nunca esa funcion "rand()", pero por logica el order by debe ir la columna con la cual deseas el ordenamiento, por otro lado el distinct se aplica tanto para art y img.

quizas algo asi deberia funcionarte:

Select DISTINCT(art),img from fotos ORDER BY RAND(art) limit 0,10
  #3 (permalink)  
Antiguo 02/09/2008, 14:09
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Qué hay mal en este Select?

Antes de nada, gracias por la respuesta =)

No funciona, directamente no da resultados... He probado con:
Cita:
Select DISTINCT (art),img from fotos ORDER BY RAND() limit 0,10
Pero tampoco da resultados...

Alguien me puede guiar?

Gracias
  #4 (permalink)  
Antiguo 02/09/2008, 14:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Qué hay mal en este Select?

El problema es que tienes que seleccionar 10 art distintos, tras ordenar todos los art al azar, y luego, también ordenándolos todos (?) al azar, seleccionar 10 registros con referencia a esos 10 art elegidos.
Si tienes menos de 10 art te mostrará líneas según el número de art que tengas:
mi propuesta es esta:

Cita:
SELECT f.id, f.art, f.img
FROM fotos f
INNER JOIN (

SELECT art
FROM fotos
GROUP BY art
ORDER BY rand( )
LIMIT 10
)t1 ON f.art = t1.art
GROUP BY f.art
ORDER BY RAND( )
LIMIT 10
Tengo mis dudas sobre si en la fase de selección de los registros tienes la posibilidad de seleccionar al azar todos los que tengan como art un art seleccionado.
Te diré, finalmente, que esto es fácil de hacer con programación. Seleccionas todos al azar y luego con un bucle vas guardando uno a uno, evitando las repeticiones de art, hasta llegar a 10.

Última edición por jurena; 02/09/2008 a las 14:39
  #5 (permalink)  
Antiguo 02/09/2008, 14:54
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Qué hay mal en este Select?

Uiii.. no entiendo mucho de la última respuesta, creía que sería algo más sencillo...
Al hacerlo así me aparecen siempre las mismas fotos, por lo que hay algún RAND que no funciona bien... pero de momento no se repiten los art...
Cómo se podría hacer del todo bien??

GRACIAS de verdad
  #6 (permalink)  
Antiguo 02/09/2008, 15:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Qué hay mal en este Select?

Prueba esta y me dices...
Cita:
SELECT f.id, art, img
FROM fotos f
INNER JOIN (

SELECT id
FROM fotos
ORDER BY rand( )
)t1 ON f.id = t1.id
GROUP BY art
ORDER BY rand( )
LIMIT 10
Primero ordeno al azar los registros; luego relaciono esos registros con esos id agrupando por art(para que no se repita el art) y ordenando al azar y eligiendo los 10 primeros. No estoy seguro, pero haz pruebas con tus registros...
  #7 (permalink)  
Antiguo 02/09/2008, 15:56
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Qué hay mal en este Select?

Esta perfecto!!! eres el amo!

muchísimas gracias hombre, gracias!
  #8 (permalink)  
Antiguo 02/09/2008, 16:37
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Qué hay mal en este Select?

Hola jurena, cómo vas?

La instrucción ON qué hace?? no en la consulta... sino en general....

Saludos man
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #9 (permalink)  
Antiguo 03/09/2008, 01:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Qué hay mal en este Select?

La instrucción on no existe como independiente, que yo sepa. A lo que te refieres es al on de INNER JOIN... ON...
ese on, como bien sabes, sirve para establecer los datos coincidentes de qué campos se unen al hacer el cruce de tablas. Pero lo que quizás despista es que no estoy uniendo dos tablas, sino tablas con una selección de datos de una tabla, lo que aparece entre paréntesis y a la que hay que poner un alias: en el texto yo le he puesto t1.
¿era esa tu duda Carxl?
Esos cruces permiten hacer una consulta de la que te traes varios valores y mediante el cruce puedes recuperar otros. Cuando se hacen agrupaciones, sólo el valor del campo por el que se agrupa y los resultados como SUM, MAX, etc. se mantienen y pueden traerse; para traerte lo demás, primero haces una selección de la que te traes el valor de agrupación y el id, gracias al cual, mediante un inner join, puedes traerte lo demás...

Saludos, Carxl
  #10 (permalink)  
Antiguo 03/09/2008, 06:50
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Qué hay mal en este Select?

Gracias por la explicación Jurena...

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
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 04:49.