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

如何获取MySQL随机整数范围?

  •  48
  • kevzettler  · 技术社区  · 16 年前

    我试图为我选择的每一行生成一个随机整数,在1到60之间作为计时器。

    SELECT downloads.date, products.*, (FLOOR(1 + RAND() * 60)) AS timer
    

    我一直在搜索这个楼层的函数,以选择一个范围内的随机整数。每排给我1分。 我错过了什么?

    我在MySQL5.0.75上

    下面是剩余的问题,我认为这可能是一个嵌套问题。

    SELECT *
    FROM (
     SELECT downloads.date, products.*, FLOOR(1 + (RAND() * 60)) AS randomtimer, 
     (
     SELECT COUNT( * )
     FROM distros
     WHERE distros.product_id = products.product_id
     ) AS distro_count,
    
     (SELECT COUNT(*) FROM downloads WHERE downloads.product_id = products.product_id) AS true_downloads
    
     FROM downloads
     INNER JOIN products ON downloads.product_id = downloads.product_id
    ) AS count_table
    WHERE count_table.distro_count > 0
    AND count_table.active = 1
    ORDER BY count_table.randomtimer , count_table.date DESC LIMIT 10
    
    4 回复  |  直到 11 年前
        1
  •  89
  •   Ryan Oberoi    16 年前

    这对我有用。可能是你的MySQL版本?

    SELECT id, (FLOOR( 1 + RAND( ) *60 )) AS timer
    FROM users
    LIMIT 0 , 30
    
        2
  •  2
  •   Jaime    16 年前

    我正在运行您的查询,它确实为每行提供了一个随机数……可能与随机(计时器)的名称有关?

        3
  •  1
  •   Michel Ayres user1485518    11 年前

    的输出 RAND 函数始终是介于 .

    试试这个:

    SELECT downloads.date, products.*, (CAST(RAND() * 60 AS UNSIGNED) + 1) AS timer
    
        4
  •  0
  •   e_r_k_a_n e_r_t_u_r_a_l    11 年前

    您可以将数字乘以表中的记录数。

    SELECT id,
    
    (FLOOR( (SELECT MIN(id)                        FROM  your_table ) + RAND( ) * 1000000 ) ) AS timer
    FROM your_table
    LIMIT 0 , 30