我有一个查询,在数据库中选择6个名字。例如
SELECT names FROM users LIMIT 6
现在我希望这个查询在数据库表中选择一个随机的6个名字,这可能吗?以及如何
答案 0 :(得分:7)
简单但缓慢的解决方案是:
SELECT names FROM users ORDER BY RAND() LIMIT 6
这使用随机数排序并具有O(n log n)性能。它应该可以运行10000行,但对于较大的表,它将无法很好地扩展。
为了加快速度,您可以查看Quassnoi的文章MySQL: selecting a number of random rows fast。
SELECT *
FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 6
FROM users
) vars
STRAIGHT_JOIN
(
SELECT names,
@lim := @lim - 1
FROM users r
WHERE (@cnt := @cnt - 1)
AND RAND() < @lim / @cnt
) i
这有O(n)表现。
答案 1 :(得分:1)
SELECT names
FROM users
ORDER BY RAND()
LIMIT 6
答案 2 :(得分:0)
这是另一个快速解决方案
Select names from users WHERE RAND() LIMIT 6