Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/06/2011, 10:33
leif_sk8er
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Agupar por dos columnas, un poco diferente

A ver, comento los resultados.
He adaptado la consulta a mi caso real, y habian un par de fallos insignificantes.

1. No puede haber limit en el IN
Código SQL:
Ver original
  1. AND f.ID NOT IN (SELECT fe1.ID_FOTO
  2.                                             FROM fotos_etiquetas fe1
  3.                                             WHERE fe1.ID_USUARIO=1
  4.                                             ORDER BY fe1.FECHA DESC LIMIT 5)

2. Al parecer, al usar UNION ALL, no se puede usar en cada una de las consultas el ORDER BY y el LIMIT. Se utilizaria el order by y el limit del final del SQL.



El resultado final de mi consulta adaptandola a mis tablas ha quedado .... "Increible" jjajaa. Puede que no la comprendais por la estructura que uso en mis tablas. Arriba simplifiqué la estructura para hacerlo mas simple.

Código SQL:
Ver original
  1. SELECT sbc.ID, sbc.FECHA, sbc.RUTA, sbc.EXTENSION, fd.ID_FOTO, fd.NOMBRE_FICHERO
  2.                 FROM (SELECT f.ID AS ID, f.RUTA, f.EXTENSION, f.FECHA AS FECHA, 1 AS TIPO, FECHA AS FECHA_ORDEN
  3.                       FROM fotos f
  4.                       WHERE f.ID_SECCION = 8 AND f.ID_ELEMENTO= $id_usuario
  5.                       AND f.ID NOT IN (SELECT fe1.ID_FOTO
  6.                                        FROM fotos_etiquetas fe1
  7.                                        WHERE fe1.ID_A_QUIEN_ETIQUETA = $id_usuario
  8.                                        ORDER BY fe1.FECHA DESC)
  9.                       UNION ALL
  10.                       SELECT fe.ID_FOTO AS ID, f1.RUTA, f1.EXTENSION, f1.FECHA AS FECHA, 0 AS TIPO, fe.FECHA AS FECHA_ORDEN
  11.                       FROM fotos_etiquetas fe, fotos f1
  12.                       WHERE fe.ID_A_QUIEN_ETIQUETA = $id_usuario AND f1.ID = fe.ID_FOTO) AS sbc, fotos_dimensiones fd
  13.                 WHERE sbc.ID != $id_img_usuario AND sbc.ID = fd.ID_FOTO AND fd.DIMENSIONES  = $tam
  14.                 ORDER BY sbc.FECHA_ORDEN DESC, sbc.TIPO ASC
  15.                 LIMIT 5


El tiempo de ejecucion es 0,0010 segs. Habrá que ver cuando hayan varios millones de filas :P


Esta es una captura de la explicacion que da, no me convence mucho por que veo muchas cosas nuevas. Pero puede que sea lo normal.

¿Como la veis vosotros?