Я пытаюсь ОБЪЕДИНИТЬ два запроса, оба из которых содержат ORDER BY. Как я обнаружил, вы не можете упорядочивать запросы, которые являются частью UNION. Я просто не знаю, как еще сделать этот запрос тогда. Позвольте мне объяснить, что я пытаюсь сделать.
- Я пытаюсь выбрать 40 самых последних профилей и из этого списка выбрать случайный набор из 20. Затем я хочу объединить это с:
- Выберите 40 случайных профилей, где профиль не попадает в исходные 40 самых последних профилей, запрошенных в первом наборе.
- Случайным образом закажите весь этот набор из 60 записей.
Я знаю об эффективности использования функции 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()
ОБНОВЛЕНИЕ: это решение основано на приведенной ниже справке Абхая (спасибо, Абхай):
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();