1

引用符の行を持つテーブルがあり(ID, QUOTE)、ランダムな引用符を取得するクエリがあります(ORDER BY RAND() LIMIT 0,1)。遅いことはわかっていますが、行が多すぎません。それでは、その日の見積もりを取得したいと思います。それはランダムな引用であるべきですが、一日中変更することはできません. 新しい列を追加したくありません。また、今日の引用を選択したくありません。ランダムな引用を取得するクエリが必要ですが、引用が終日同じになり、翌日は他のランダムな引用が返されます。この SQL Palladins を行う方法?

4

2 に答える 2

10

現在の日付に基づく乱数ジェネレーターのシードを使用します。

ORDER BY RAND(20120714) LIMIT 1

ここで「その他」が何を意味しているのかについても興味があります。

翌日、他のランダムな見積もりが返されます。

毎日異なるランダムな引用符を選択したい場合は、単純なORDER BY RAND(seed). これにより、3 日連続で同じ見積もりが返される可能性があります。

これを回避したい場合は、代わりに、毎日選択された引用を保存し、過去 n 日間使用されていない引用からランダムに引用を選択できます。もちろん、引用符が最後に使用されたときに保存している場合は、元の問題に対する自然な解決策もあります。

  • 今日最後に使用された引用を探します。
  • あるとすれば、それが今日の名言です。
  • そうでない場合は、過去 n 日間使用されていない行からその日の新しい見積もりを選択し、その行を更新して、それが今日のその日の見積もりであることを示します。

新しい列を追加したくない

OK、少し異なるアプローチはどうですか:

ORDER BY RAND(201207) LIMIT 14, 1
--            yyyymm        dd

これで、余分な列は必要なくなり、おそらく月が変わる場合を除いて、繰り返されることもありません。このソリューションでは、少なくとも 32 の見積もりから選択できることを前提としています。

于 2012-06-14T19:49:53.073 に答える
0

この問題を解決するには、ID の最大値と最小値を 1 日に 1 回選択するアプリケーションを作成する必要があります。その範囲から乱数を計算します。その番号をファイルに書き込みます。

見積もりの​​印刷を担当するアプリケーションは、ファイルに保存された ID に基づいて見積もりを選択します。

最近では、Python、Perl、PHP などの十分な数の言語が優れた DB インターフェイスを備えています。Python にも random ライブラリがあります。

于 2012-06-15T12:30:13.813 に答える