In + Rand()+限制

时间:2018-03-04 14:25:59

标签: mysql sql random limit

我有一个像这样的db“链接”:

id(primary) | name_id | type | url

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

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个结果,例如(在db中我可以为一个name_id设置10个以上的行)。

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

1 个答案:

答案 0 :(得分:0)

如果您知道五个,那么您可以使用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)上的索引。