【发布时间】:2011-09-17 20:36:56
【问题描述】:
我正在尝试合并两个都包含 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()
更新:这是基于以下 Abhay 帮助的解决方案(感谢 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();
【问题讨论】: