我有一个像这样的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。怎么做?
答案 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)
上的索引。