【发布时间】:2014-05-08 16:31:27
【问题描述】:
我想运行这样的查询,这样我将始终得到 20 个结果,即使第一个 SELECT 语句没有足够的数据来返回 10 个结果。
(
SELECT t.column1, t.column2
FROM table t
WHERE t.status = 1
LIMIT 10
)
UNION
(
SELECT t.column1, t.column2
FROM table t
WHERE t.status = 2
LIMIT 20
)
LIMIT 20
但是我想ORDER BY RAND() 并确保第一个SELECT 语句的所有可用结果都包含在最终结果集中。
当我将 ORDER BY RAND() 添加到此查询的末尾时,它给我的结果集不包括第一个 SELECT 的所有 10 个结果,我假设因为它确实得到 30 行,然后随机选择 20从 30 岁开始。
任何想法将不胜感激。
这对我有用:
SELECT x.*
FROM ((
SELECT t.column1, t.column2
FROM table t
WHERE t.status = 1
LIMIT 10
)
UNION
(
SELECT t.column1, t.column2
FROM table t
WHERE t.status = 2
LIMIT 20
)
LIMIT 20) x
ORDER BY RAND
【问题讨论】: