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

una consulta que no he podido solucionar :'(

Estas en el tema de una consulta que no he podido solucionar :'( en el foro de Mysql en Foros del Web. Hola que tal chicos, como estan :D . Pues bueno ya llevo unos dias con una consulta que he visto y repasado tratando de buscarle ...
  #1 (permalink)  
Antiguo 13/01/2015, 08:03
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
una consulta que no he podido solucionar :'(

Hola que tal chicos, como estan :D . Pues bueno ya llevo unos dias con una consulta que he visto y repasado tratando de buscarle la solucion, pero no la he encontrado. Talves por que nunca tube ese problema :(

Lo que pasa es que hay tres tablas: dueñoLibro, libro y fotos. Relación(fotos--->libro<-----dueñoLibro)

tonces, yo quiero sacar los seis primeros libros del usuario 5, ya lo logre asi:
Código MySQL:
Ver original
  1. SELECT bb.libro, bb.usuario, bb.cod, li.nombre name, li.permisos, li.cod lcod
  2. FROM dueñoLibro bb
  3. INNER JOIN libro li ON li.cod = bb.libro
  4. WHERE bb.usuario =5
  5. ORDER BY li.cod DESC
  6. LIMIT 0 , 6

ahora despues de eso, quiero sacar las 4 primeras fotos de cada uno de los 6 libros ya consultados, ahi es donde esta el problema. Por que no lo he logrado. Aca mis consultas erroneas.
Código MySQL:
Ver original
  1. SELECT bb.libro, bb.usuario, bb.cod, li.nombre name, li.permisos, li.cod lcod ,
  2. (
  3.   SEPARATOR  '|' )
  4.   FROM fotos f
  5.   WHERE f.libro = li.cod
  6.   LIMIT 4
  7. )fotos
  8. FROM dueñoLibro bb INNER JOIN libro li ON li.cod = bb.libro
  9. WHERE bb.usuario =1
  10. ORDER BY li.cod DESC
  11. LIMIT 0 , 6
  12.  
  13.  
  14. SELECT bb.libro, bb.usuario, bb.cod, li.nombre name, li.permisos, li.cod lcod
  15. FROM dueñoLibro bb
  16. INNER JOIN libro li ON li.cod = bb.libro
  17.     select fo.nombre
  18.     from fotos fo
  19.     where li.cod=fo.libro  --la variable li.cod no esta definida
  20.     limit 4
  21. )fo
  22. WHERE bb.usuario =1
  23. ORDER BY li.cod DESC
  24. LIMIT 0 , 6

me gustaria hacerla como la segunda consulta, solo que como vieron ahí un error. La primera consulta no me sirve por que necesito ponerle mas datos de las fotos (src, height, width , etc).

Agradezco muchachos la ayuda :D
  #2 (permalink)  
Antiguo 14/01/2015, 09:49
 
Fecha de Ingreso: octubre-2014
Ubicación: Buenos Aires
Mensajes: 278
Antigüedad: 9 años, 6 meses
Puntos: 12
Respuesta: una consulta que no he podido solucionar :'(

Hola sonickseven, tienes razon se trata de ayudar.

te hago una consulta, las imágenes tiene que aparecer en un mismo registro, pregunto porque vi que estas usando el group_concat.

Código MySQL:
Ver original
  1.   SEPARATOR  '|' )
  2.   FROM fotos f
  3.   WHERE f.libro = li.cod
  4.   LIMIT 4

Esto te da como resultado algo como esto.

'1|1|1|1|2|2|1'

o necesitas que aparezcan de esta forma

idlibro | foto
-----------------------
1 foto1.jpg
1 foto2.jpg
1 foto3.jpg
1 foto4.jpg
2 foto1.jpg
2 foto1.jpg

Saludos.
__________________
http://www.sp-vision.net
  #3 (permalink)  
Antiguo 16/01/2015, 11:34
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: una consulta que no he podido solucionar :'(

si de la segunda, sin el concat, ademas que con el concat pense, pero no sale como quiero(salen mas de 4 registros y no solo necesito el cod, sino tambien src y otros atributos)

Olle gracias por contestar :D
  #4 (permalink)  
Antiguo 16/01/2015, 11:44
 
Fecha de Ingreso: octubre-2014
Ubicación: Buenos Aires
Mensajes: 278
Antigüedad: 9 años, 6 meses
Puntos: 12
Respuesta: una consulta que no he podido solucionar :'(

Consulta sonickseven, esto lo tienes que mostrar en alguna web, ya que si estas utilizando PHP puedes traer todos los campos que necesites y controlar las 4 imágenes con código php.

Saludos.
__________________
http://www.sp-vision.net
  #5 (permalink)  
Antiguo 16/01/2015, 13:25
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: una consulta que no he podido solucionar :'(

Una posible solución:

Código MySQL:
Ver original
  1. SELECT bb.libro, bb.usuario, bb.cod, li.nombre, li.permisos, li.cod lcod, fotos
  2. FROM dueñoLibro bb
  3.     INNER JOIN libro li ON li.cod = bb.libro
  4.     LEFT JOIN
  5.         (SELECT cod_libro, GROUP_CONCAT(DISTINCT cod_libro SEPARATOR '|') fotos
  6.         FROM
  7.             (SELECT cod_foto, cod_libro, IF(@lib=cod_libro, @orden:= orden+1, @orden:=0) ord, IF(@lib=cod_libro, @lib, @lib:=cod_libro) lb
  8.             FROM
  9.                 (SELECT f.cod cod_foto, f.libro cod_libro, @lib := '', @orden:=0
  10.                 FROM fotos f
  11.                 ORDER BY f.lib) T1
  12.             ) T2
  13.         WHERE ord <=6
  14.         GROUP BY cod_libro) T3 ON li.co = T3.cod_libro
  15. WHERE bb.usuario =1
  16. ORDER BY li.cod DESC
  17. LIMIT 0 , 6;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 23/01/2015, 11:24
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: una consulta que no he podido solucionar :'(

esta consulta que me hisiste solo me muestra la primera foto, no las cuatro :/
Código MySQL:
Ver original
  1. SELECT bb.libro, bb.usuario, bb.cod, li.nombre, li.permisos, li.cod lcod, fotos
  2.     FROM dueñoLibro bb
  3.         INNER JOIN libro li ON li.cod = bb.libro
  4.         LEFT JOIN
  5.             (SELECT cod_libro, GROUP_CONCAT(DISTINCT cod_libro SEPARATOR '|') fotos
  6.             FROM
  7.                 (SELECT cod_foto, cod_libro, IF(@lib=cod_libro, @orden:= @orden+1, @orden:=0) ord, IF(@lib=cod_libro, @lib, @lib:=cod_libro) lb
  8.                 FROM
  9.                     (SELECT f.cod cod_foto, f.libro cod_libro, @lib := '', @orden:=0
  10.                     FROM fotos f
  11.                     ORDER BY f.libro) T1
  12.                 ) T2
  13.             WHERE ord <=6
  14.             GROUP BY cod_libro) T3 ON li.cod = T3.cod_libro
  15.     WHERE bb.usuario =1
  16.     ORDER BY li.cod DESC
  17.     LIMIT 0 , 6;

y necesito cuatro o menos imágenes por cada libro
  #7 (permalink)  
Antiguo 23/01/2015, 11:26
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: una consulta que no he podido solucionar :'(

no hay manera de hacerla algo similar a esta?
Código MySQL:
Ver original
  1. SELECT bb.libro, bb.usuario, bb.cod, li.nombre name, li.permisos, li.cod lcod ,
  2. (
  3.   SEPARATOR  '|' )
  4.   FROM fotos f
  5.   WHERE f.libro = li.cod
  6.   LIMIT 4
  7. )fotos
  8. FROM dueñoLibro bb INNER JOIN libro li ON li.cod = bb.libro
  9. WHERE bb.usuario =1
  10. ORDER BY li.cod DESC
  11. LIMIT 0 , 6

es que lo que me falta solucionar es como llamar la variable libro en la primera subconsulta
  #8 (permalink)  
Antiguo 23/01/2015, 11:28
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: una consulta que no he podido solucionar :'(

Yo no tengo tu base, por lo que las propuestas que te puedo hacer son teóricas...
Postea los datos que tienes, el backup de la estructura de tu base, y veamos probando con el escenario real.

Eso, o intenta resolverlo por ti mismo en base a la lógica que te propongo. Si la lógica te resulta compleja, entonces pregunta qué es lo que no entiendes.
Aquí no te vamos a regalar el código que te sirva 100% eficiente. Solo son guías para que realices tu parte.

PD: Esa consulta no funciona para lo que quieres. No es que se pueda hacer "parecida". Debe forzosamente ser diferente porque no contiene las mismas condiciones a cumplir.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 23/01/2015, 11:30
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: una consulta que no he podido solucionar :'(

y preferiría no hacerlo con concat por que no solo necesito el código, también necesito el tamaño de la imagen en px, donde esta ubicada, etc
  #10 (permalink)  
Antiguo 23/01/2015, 11:35
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: una consulta que no he podido solucionar :'(

ja aj ja no tranquilo :D disculpa si te ofendo en algún momento. Mi lógica (algo corta en mysql) segun veo eso que yo quiero hacer es algo complicado en mysql. voy a usar el de la variable que suma para la que me puso un amigo y si logro te confirmo se usa concat, pero es lo mas me sirve por ahora :D.
  #11 (permalink)  
Antiguo 10/07/2015, 22:50
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: una consulta que no he podido solucionar :'(

chicos volvi a tocar esta consulta, y aca tengo otra forma mucho mejor de explicarla, hago un select_concat con un limite de 4 pero muestra mas de 4, alguno sabe como solucionarlo? aca vean mucho mas especifico el problema bd mejor planteada

Etiquetas: join, select, solucionar, tabla
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 11:21.