gpt4 book ai didi

mysql - 其中 In + Rand() + Limit

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

我有一个像这样的数据库“链接”:

id(primary) | name_id | type | url

我正在尝试为 5 个唯一的 name_id 查找一个随机 URL。我只想为一个人这样做:

SELECT url
FROM link
WHERE name_id=1
ORDER BY RAND()
LIMIT 1

它有效。所以,我想了五个,这样做:

SELECT url
FROM link
WHERE name_id IN (1,2,3,4,5)
ORDER BY RAND()
LIMIT 5

但是,它不起作用,因为它会找到 name_id=1 的 2 个结果和 name_id=2 的 3 个结果(在数据库中,一个 name_id 可以有 10 多行)。

我想在 1 个请求 SQL 中为每个 name_id 返回一个随机 url。如何做到这一点?

最佳答案

如果您知道这五个,那么您可以使用union all:

(SELECT url FROM link WHERE name_id = 1 ORDER BY RAND() LIMIT 1
) UNION ALL
(SELECT url FROM link WHERE name_id = 2 ORDER BY RAND() LIMIT 1
) UNION ALL
(SELECT url FROM link WHERE name_id = 3 ORDER BY RAND() LIMIT 1
) UNION ALL
(SELECT url FROM link WHERE name_id = 4 ORDER BY RAND() LIMIT 1
) UNION ALL
(SELECT url FROM link WHERE name_id = 5 ORDER BY RAND() LIMIT 1
);

如果性能是一个问题,还有其他更快的方法来获取“随机”行。

但是,如果给定名称只有 10 个左右的 URL,那么上面的方法应该没问题。 。 。特别是在 link(name_id, url) 上有索引。

关于mysql - 其中 In + Rand() + Limit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49096451/

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