我有一个这样的数据库“链接”:
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。怎么做?
发布于 2018-03-04 14:37:58
如果你知道这五个,那么你可以使用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)上有索引。
https://stackoverflow.com/questions/49096451
复制相似问题