web-dev-qa-db-ja.com

mysqlのランダムな整数範囲を取得する方法は?

タイマーとして1〜60の間で選択した各行に対してランダムな整数を生成しようとしています。

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

範囲内のランダムな整数を選択する方法として、このFLOOR関数を検索し続けています。これにより、すべての行に1が与えられます。私は何が欠けていますか?

私はmysql 5.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
48
kevzettler

これは私のために働いています。あなたのmysqlバージョン?

SELECT id, (FLOOR( 1 + Rand( ) *60 )) AS timer
FROM users
LIMIT 0 , 30
91
Ryan Oberoi

私はあなたのクエリを実行していますが、それは各行にランダムな番号を与えます....ランダムな名前(タイマー)と関係があるのでしょうか?

2
Jaime

Rand関数の出力は、常にと1の間の値になります。

これを試して:

SELECT downloads.date, products.*, (CAST(Rand() * 60 AS UNSIGNED) + 1) AS timer
1
Chris Morley

テーブル内のレコード数に乗算した数を増やすことができます。

SELECT id,

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