代码之家  ›  专栏  ›  技术社区  ›  kevzettler

MySQL Rand()为什么讨厌我?

  •  2
  • kevzettler  · 技术社区  · 17 年前

    这是一个简化的查询,是我在一个更大的连接查询上试图做的事情。它仍然在这个小规模上破裂。我试图为每一行生成一个随机数,范围在1-60之间。然后,我想按这个随机数对返回的行进行排序。

     SELECT downloads . * , 
    (FLOOR( 1 + ( RAND( ) *60 ) )) AS randomtimer
    FROM downloads
    ORDER BY randomtimer
    LIMIT 25 
    

    我有两个数据库尝试了这个查询。一个是实时数据库,一个是开发数据库。我并排比较了这两者,它们在结构上都是相同的。它在dev one上工作正常。返回randomtimer排序的行。

    4 回复  |  直到 17 年前
        1
  •  7
  •   Eric Petroelje    17 年前

    您正在生成一个介于1和60之间的随机数,然后选择前25行。如果有足够多的行(统计上)最终会超过25行,随机值为1,那么前25行当然都会在“randomtimer”列中的值为1。

    因此,这可能是因为生产环境中的数据比开发服务器上的数据多得多。

        2
  •  6
  •   brian-brazil    17 年前

    从 RAND docs :

    ORDER BY子句中的值,因为 ORDER BY将评估该列 按随机顺序检索行,如

    mysql>从tbl_name中选择*按顺序 RAND();

        3
  •  0
  •   kevzettler    17 年前

    我决定放弃这个想法,在php中创建一个与返回结果长度相同的随机数数组,然后进行排序和使用。

        4
  •  0
  •   Rap    17 年前

    我会抛出一个想法。..RAND函数使用时间作为种子。在实时系统中,整个查询在同一毫秒内完成,因此所有随机数都是相同的。在开发系统上,它需要更长的时间,所以你会得到更多的随机数。如果你的实时系统比开发系统更强大,这可能是有道理的。

    只是一个想法。

    推荐文章