Estoy intentando UNION dos consultas que contienen ORDER BY's. Como he descubierto, no puede ordenar por consultas que forman parte de UNION. Simplemente no sé cómo más hacer esta consulta. Déjame explicarte lo que estoy tratando de hacer.MySQL UNION 2 consultas que contienen ORDER BYs
- Estoy tratando de seleccionar los 40 perfiles más recientes y de esa lista seleccionar un conjunto aleatorio de 20. entonces quiero que la unión con:
- Seleccionar 40 perfiles de azar en el que el perfil no está comprendida en el original 40 perfiles más recientes consultados en el primer conjunto
- Ordene al azar ese conjunto completo de 60 registros.
Soy consciente de las ramificaciones de la eficiencia de la utilización de la función rand()
SELECT profileId
FROM (SELECT profileId
FROM profile profile2
WHERE profile2.profilePublishDate <= Now()
ORDER BY profile2.profilePublishDate DESC
LIMIT 0,40) AS profile1
ORDER BY RAND()
LIMIT 0,20
UNION (SELECT profileId
FROM profile profile4
WHERE profileId NOT IN (SELECT profileId
FROM profile profile4
WHERE profile4.profilePublishDate <= Now()
ORDER BY profile4.profilePublishDate DESC
LIMIT 0,40)
ORDER BY RAND()
LIMIT 0,40) as profile3
ORDER BY RAND()
ACTUALIZACIÓN: Esta es la solución basada en la ayuda de Abhay a continuación (gracias Abhay):
SELECT *
FROM
(
(
SELECT profileId
FROM
(
SELECT profileId
FROM profile profile2
WHERE profile2.profilePublishDate <= Now()
ORDER BY profile2.profilePublishDate DESC
LIMIT 0,40
) AS profile1
ORDER BY RAND()
LIMIT 0,20
)
UNION
(
SELECT profileId
FROM profile profile4
WHERE profileId NOT IN (
SELECT * FROM
(
SELECT profileId
FROM profile profile4
WHERE profile4.profilePublishDate <= Now()
ORDER BY profile4.profilePublishDate DESC
LIMIT 0,40
) AS temp2
)
ORDER BY RAND()
LIMIT 0,40
)
) TEMP
ORDER BY RAND();
Gracias - Su solución resolvió mi problema sin embargo surgió un nuevo error (Esta versión de MySQL aún no admite 'LIMIT & IN/ALL/ANY/ALGUNA subconsulta ') que también he resuelto con otro seleccionar y publicado la consulta completa anterior en mi publicación original. Gracias por su ayuda para resolver esto. – Cheeky
@Cheeky: Sí, esta es la manera de resolverlo, con las limitaciones que plantea MySQL :) –