首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >In + Rand() +极限

In + Rand() +极限
EN

Stack Overflow用户
提问于 2018-03-04 14:25:59
回答 1查看 58关注 0票数 0

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

代码语言:javascript
复制
id(primary) | name_id | type | url

我试图找到5个唯一的name_id随机网址。我想只做一件事:

代码语言:javascript
复制
SELECT url
FROM link
WHERE name_id=1
ORDER BY RAND()
LIMIT 1

它起作用了。所以,我想五个人,像这样做:

代码语言:javascript
复制
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个结果(在db中,一个name_id可以有10+行)。

我希望在1请求SQL中为每个name_id返回一个随机url。怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-04 14:37:58

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

代码语言:javascript
复制
(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)上有索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49096451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档