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

Seleccionar 2 campos al azar con diferente usuario

Estas en el tema de Seleccionar 2 campos al azar con diferente usuario en el foro de Mysql en Foros del Web. Hola que tal? tengo la siguiente tabla: tabla fotos ------------- id_foto nombre_foto usuario ------------------- id_foto nombre_foto usuario 1 foto.jpg Lourdes 2 foto2.jpg Maria 3 foto3.jpg ...
  #1 (permalink)  
Antiguo 21/11/2013, 22:53
Avatar de tnyplnc  
Fecha de Ingreso: junio-2013
Ubicación: mexicali
Mensajes: 64
Antigüedad: 10 años, 9 meses
Puntos: 3
Seleccionar 2 campos al azar con diferente usuario

Hola que tal?
tengo la siguiente tabla:

tabla fotos
-------------
id_foto
nombre_foto
usuario
-------------------




id_foto nombre_foto usuario

1 foto.jpg Lourdes
2 foto2.jpg Maria
3 foto3.jpg Lourdes
4 foto4.jpg Antonio



¿Como seria la sentencia SQL para seleccionar 2 fotos al azar pero que sea diferente usuario?

Gracias un saludo!
__________________
El conocimiento no sirve de nada si no se comparte!
  #2 (permalink)  
Antiguo 22/11/2013, 08:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Seleccionar 2 campos al azar con diferente usuario

http://www.johnsansom.com/generate-a...in-sql-server/

ya probaste con eso? podria ser que sacaras el minimo y maximo valor de tu tabla y luego los metieras a la funcion y obtuvieras el numero ramdom de foto e igual de usuario :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 22/11/2013, 14:41
Avatar de tnyplnc  
Fecha de Ingreso: junio-2013
Ubicación: mexicali
Mensajes: 64
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: Seleccionar 2 campos al azar con diferente usuario

Gracias por tu respuesta Libras, pero lo que necesito es que sea una foto aleatoria pero que no sea del mismo usuario.
Lo puedo hacer de la siguiente manera con 2 sentencias

Código SQL:
Ver original
  1. SELECT usuario, nombre_foto  FROM fotos ORDER BY RAND() LIMIT 1

imprimo la 1era foto y saco el valor del usuario para validar la foto segunda, y que no sea del mismo usuario


Código SQL:
Ver original
  1. SELECT usuario, nombre_foto  FROM fotos WHERE usuario!='$usuario1' ORDER BY RAND() LIMIT 1


Pero quería saber si se puede hacer en 1 sentencia nomas y no aumentar código.
__________________
El conocimiento no sirve de nada si no se comparte!
  #4 (permalink)  
Antiguo 22/11/2013, 14:53
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: Seleccionar 2 campos al azar con diferente usuario

Muevo a foro de MySQL, porque la sintaxis es de MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 23/11/2013, 03:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar 2 campos al azar con diferente usuario

Código MySQL:
Ver original
  1. SELECT t1.usuario,
  2. t1.id_foto,
  3. t1.nombre_foto
  4.    FROM
  5.           (SELECT
  6.              id_foto,
  7.              usuario,
  8.              nombre_foto
  9.                     FROM fotos
  10.                         ORDER BY RAND( ))t1
  11.     GROUP BY t1.usuario
  12.     LIMIT 2

Última edición por jurena; 23/11/2013 a las 06:22
  #6 (permalink)  
Antiguo 23/11/2013, 16:38
Avatar de tnyplnc  
Fecha de Ingreso: junio-2013
Ubicación: mexicali
Mensajes: 64
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: Seleccionar 2 campos al azar con diferente usuario

Gracias por tu respuesta jurena, me funciono tu sentencia, solo que con esa sentencia por ejemplo si tengo 3 usuarios, solo me iba a comparar las fotos de usuario1 y usuario2. Asi que le puse otro random y quedo asi:


Código MySQL:
Ver original
  1. SELECT t1.usuario,
  2. t1.id_foto,
  3. t1.nombre_foto
  4.    FROM
  5.           (SELECT
  6.              id_foto,
  7.              usuario,
  8.              nombre_foto
  9.                     FROM fotos
  10.                         ORDER BY RAND())t1
  11.     GROUP BY t1.usuario  ORDER BY RAND()
  12.     LIMIT 2

Y me funciona muy bien. Perdón por mi ignorancia pero si me podrías explicar que hace exactamente esa sentencia por favor, lo de "t1" también .
Muchas gracias !
__________________
El conocimiento no sirve de nada si no se comparte!
  #7 (permalink)  
Antiguo 23/11/2013, 17:05
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: Seleccionar 2 campos al azar con diferente usuario

Cita:
Perdón por mi ignorancia pero si me podrías explicar que hace exactamente esa sentencia por favor, lo de "t1" también .
Es un tema que puedes descubrir intentando quitarlo. Se disparará un error que suele tener el mensaje de "every derived table must have an alias", es decir "toda tabla derivada debe tener un alias".
Una tabla derivada es una tabla creada dinámicamente (al momento de la ejecución) por una subconsulta que se pone en un FROM.
Esto es una regla general de todos los DBMS.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 23/11/2013, 18:11
Avatar de tnyplnc  
Fecha de Ingreso: junio-2013
Ubicación: mexicali
Mensajes: 64
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: Seleccionar 2 campos al azar con diferente usuario

Gracias gnzsoloyo por la explicación, ya me quedo claro lo de ponerle un alias a la tabla ( lo de t1).
En si lo que hace es una subconsulta, me da al azar 1 usuario, y de ese usuario me da 1 foto al azar, asi 2 veces al azar (las que yo ponga como LIMIT).
¿Es correcto?
__________________
El conocimiento no sirve de nada si no se comparte!
  #9 (permalink)  
Antiguo 23/11/2013, 18:17
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: Seleccionar 2 campos al azar con diferente usuario

Cita:
¿Es correcto?
¿Te ha funcionado según lo que esperabas?
Si es así, entonces es correcto.

¿No te ha funcionado como esperabas?
Entonces deberás mostrarnos por qué te parece que el resultado no es lo que esperas. Con datos.
En el aire y sin analizar el escenario real hay cosas que no son sencillas de ajustar.

Los que recién se inician siempre preguntan cuál es "lo mejor", "lo optimo", "la mejor forma" y eso, en este rubro, no existe.
- Lo mejor es lo que cumple lo que necesitas.
- Lo más optimo es lo que en un determinado caso (aunque no aplique a otros casos "parecidos") resulta efectivo, eficiente y de bajo costo en tiempo y recursos. Y determinar eso lleva mucho tiempo y experiencia.
- En cuanto a "la mejor forma"... eso tampoco existe. Lo mejor par aun caso puede ser malo para otro parecido, por simple cambio de contexto.

En mi experiencia he visto consultas "perfectas", de manual, funcionar muy mal en la vida real. Y también consultas que son un espanto de diseño, pero que en una base productiva funcionan de maravilla.
Todo depende del escenario.

Trata de lograr lo mejor que tu puedas. El resto te lo dará la práctica, y la ayuda que se te pueda brindar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 23/11/2013, 18:43
Avatar de tnyplnc  
Fecha de Ingreso: junio-2013
Ubicación: mexicali
Mensajes: 64
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: Seleccionar 2 campos al azar con diferente usuario

Mas bien me refería si es correcto lo que hacia esa sentencia, porque no soy experto en el tema y quería saber que hacia exactamente esa sentencia, unir tablas y hacer subconsultas no soy muy bueno :D ando aprendiendo.
Se lo que te refieres y es muy cierto lo que comentas, cada proyecto es diferente y tiene diferentes necesidades, aunque tengan un mismo giro, que sean parecidos pero no es igual, simplemente con el hecho de que cumple con los requerimientos y que funcione adecuadamente se puede decir que es efectivo, es bueno, es optimo.
y la sentencia me funciono perfecto, ya con el tiempo y con mas datos veremos si cumple la consulta como espero.
Gracias a todos, un saludo!
__________________
El conocimiento no sirve de nada si no se comparte!
  #11 (permalink)  
Antiguo 24/11/2013, 03:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar 2 campos al azar con diferente usuario

Creo que tu consulta es buena y te diré por qué:
Código MySQL:
Ver original
  1. SELECT t1.usuario,
  2. t1.id_foto,
  3. t1.nombre_foto
  4.    FROM
  5.           (SELECT
  6.              id_foto,
  7.              usuario,
  8.              nombre_foto
  9.                     FROM fotos
  10.                         ORDER BY RAND())t1
  11.     GROUP BY t1.usuario  ORDER BY RAND()
  12.     LIMIT 2

La mía primero ordena al azar y luego agrupa y limita a 2. Los elementos que se repiten tienen más probabilidades de aparecer antes (si hay dos, puede que uno aparezca después, pero hay menos posibilidades de que aparezcan los dos, y, como el agrupado deja el primero que aparece, el LIMIT lo recoge en mayor número de ocasiones un elemento repetido. La tuya primero ordena al azar, luego agrupa (de esa manera los que se repiten también tiene las mismas posibilidades, aunque solo queda uno), luego vuelves a ordenar al azar y finalmente haces el limit. Sí creo que es buena para lo que es el ORDER BY RAND() de MySQL.

Última edición por jurena; 24/11/2013 a las 03:37

Etiquetas: bases-de-datos-general, campos, diferente, siguiente, sql, tabla, usuario
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 01:59.