引用符の行を持つテーブルがあり(ID, QUOTE)
、ランダムな引用符を取得するクエリがあります(ORDER BY RAND() LIMIT 0,1)
。遅いことはわかっていますが、行が多すぎません。それでは、その日の見積もりを取得したいと思います。それはランダムな引用であるべきですが、一日中変更することはできません. 新しい列を追加したくありません。また、今日の引用を選択したくありません。ランダムな引用を取得するクエリが必要ですが、引用が終日同じになり、翌日は他のランダムな引用が返されます。この SQL Palladins を行う方法?
2 に答える
現在の日付に基づく乱数ジェネレーターのシードを使用します。
ORDER BY RAND(20120714) LIMIT 1
ここで「その他」が何を意味しているのかについても興味があります。
翌日、他のランダムな見積もりが返されます。
毎日異なるランダムな引用符を選択したい場合は、単純なORDER BY RAND(seed)
. これにより、3 日連続で同じ見積もりが返される可能性があります。
これを回避したい場合は、代わりに、毎日選択された引用を保存し、過去 n 日間使用されていない引用からランダムに引用を選択できます。もちろん、引用符が最後に使用されたときに保存している場合は、元の問題に対する自然な解決策もあります。
- 今日最後に使用された引用を探します。
- あるとすれば、それが今日の名言です。
- そうでない場合は、過去 n 日間使用されていない行からその日の新しい見積もりを選択し、その行を更新して、それが今日のその日の見積もりであることを示します。
新しい列を追加したくない
OK、少し異なるアプローチはどうですか:
ORDER BY RAND(201207) LIMIT 14, 1
-- yyyymm dd
これで、余分な列は必要なくなり、おそらく月が変わる場合を除いて、繰り返されることもありません。このソリューションでは、少なくとも 32 の見積もりから選択できることを前提としています。
この問題を解決するには、ID の最大値と最小値を 1 日に 1 回選択するアプリケーションを作成する必要があります。その範囲から乱数を計算します。その番号をファイルに書き込みます。
見積もりの印刷を担当するアプリケーションは、ファイルに保存された ID に基づいて見積もりを選択します。
最近では、Python、Perl、PHP などの十分な数の言語が優れた DB インターフェイスを備えています。Python にも random ライブラリがあります。