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 originalAND f.ID NOT IN (SELECT fe1.ID_FOTO
FROM fotos_etiquetas fe1
WHERE fe1.ID_USUARIO=1
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 originalSELECT sbc.ID, sbc.FECHA, sbc.RUTA, sbc.EXTENSION, fd.ID_FOTO, fd.NOMBRE_FICHERO
FROM (SELECT f.ID AS ID, f.RUTA, f.EXTENSION, f.FECHA AS FECHA, 1 AS TIPO, FECHA AS FECHA_ORDEN
FROM fotos f
WHERE f.ID_SECCION = 8 AND f.ID_ELEMENTO= $id_usuario
AND f.ID NOT IN (SELECT fe1.ID_FOTO
FROM fotos_etiquetas fe1
WHERE fe1.ID_A_QUIEN_ETIQUETA = $id_usuario
ORDER BY fe1.FECHA DESC)
UNION ALL
SELECT fe.ID_FOTO AS ID, f1.RUTA, f1.EXTENSION, f1.FECHA AS FECHA, 0 AS TIPO, fe.FECHA AS FECHA_ORDEN
FROM fotos_etiquetas fe, fotos f1
WHERE fe.ID_A_QUIEN_ETIQUETA = $id_usuario AND f1.ID = fe.ID_FOTO) AS sbc, fotos_dimensiones fd
WHERE sbc.ID != $id_img_usuario AND sbc.ID = fd.ID_FOTO AND fd.DIMENSIONES = $tam
ORDER BY sbc.FECHA_ORDEN DESC, sbc.TIPO ASC
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?