gpt4 book ai didi

mysql - 在具有单独 LIMIT 语句的 MySQL UNION 查询中使用 ORDER BY RAND()

转载 作者:行者123 更新时间:2023-11-29 08:06:04 25 4
gpt4 key购买 nike

我想运行这样的查询,这样我总是会得到 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 行,然后从 30 行中随机选择 20 行。

任何想法将不胜感激。

这是对我有用的:

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

最佳答案

如果您在应用 LIMIT 20 之前先按照 SELECT 的“来源”对 UNION 结果进行排序,则应该可行:

SELECT … FROM
(
(
SELECT t.column1, t.column2, 0 AS ordervalue FROM … WHERE …
LIMIT 10
)
UNION
(
SELECT t.column1, t.column2, 1 FROM … WHERE …
LIMIT 20
)
ORDER BY ordervalue ASC # this will make the values from your first SELECT come
# first, then the ones from the second

LIMIT 20 # of those ordered values, the first 20 are taken
)
ORDER BY RAND()

我在这里引入了一个静态值作为ordervalue - 在您的特殊情况下,这是没有必要的,因为您通过status 1或2进行选择,因此您可以按直接那个值。但如果情况并非如此(或者状态值会不同),那么“伪”列值将是正确的选择。

关于mysql - 在具有单独 LIMIT 语句的 MySQL UNION 查询中使用 ORDER BY RAND(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22725937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com