In + Rand()+限制

问题描述 投票:0回答:1

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

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

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

mysql sql random limit
1个回答
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)指数。

© www.soinside.com 2019 - 2024. All rights reserved.