0

私の PHP プログラムのコンテキストでは、このクエリは毎分新しいデータベース項目をエコーし​​ます。これはまさに私が望んでいることです。

SELECT * FROM dogs ORDER BY rand(ROUND(UNIX_TIMESTAMP()/60)) LIMIT 1

ただし、これを行うと:

SELECT * FROM dogs WHERE dateused<44 ORDER BY rand(ROUND(UNIX_TIMESTAMP()/60)) LIMIT 1

WHERE クエリは機能しますが、rand からの数値はシードされません。このクエリが実行されるたびに、新しいデータベース アイテムのエコーが発生します。

シード数を 1 分間取得する方法について、何かアイデアはありますか? または、少なくとも回避策です。どうもありがとう!

4

2 に答える 2

0

ドキュメントにあるように、「MySQL 5.1.16 の時点で、非定数の初期化子 (カラム名など) が引数として使用されている場合、シードは RAND() の呼び出しごとの値で初期化されます」( http:// dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html#function_rand )。

ただし、これは MySQL 5.1.16 以降のバージョン用です。MySQL 5.1.3 から 5.1.15 では、非定数引数は許可されていません。それ以前は、非定数引数を使用した場合の影響は未定義です。

そのため、定数でない引数から一貫性のない結果が得られる場合、それはおそらく MySQL のバージョンです。

私は 5.1.47 MySQL であなたがしていることを試してみました。

于 2013-03-11T13:34:32.630 に答える
0

この方法を試してください:SELECT * FROM dogs ORDER BY rand(MINUTE(NOW())) LIMIT 1

于 2013-03-11T09:50:25.800 に答える