在mySql查询中获取随机值

时间:2010-05-05 19:15:39

标签: mysql

我有一个查询,在数据库中选择6个名字。例如

SELECT names FROM users LIMIT 6

现在我希望这个查询在数据库表中选择一个随机的6个名字,这可能吗?以及如何

3 个答案:

答案 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