3

引用符を含むデータベースがあります。ランダムな引用符を表示するのが好きです。しかし、2つの条件があります。

  • 先週表示された見積もりは選択しないでください。
  • 過去に見積もりが表示される距離が遠いほど、見積もりを選択する可能性が高くなります。

最初のものはそれほど難しくありません。これにはWHERE句を使用できます。

2番目は実装方法がわかりません。これを行う簡単な方法はありますか、またはこれのために複雑な関数を定義する必要がありますか?

またいいかもしれない1つの拡張。最初は、ほとんどの見積もりは表示されていません。まだ表示されていない見積もりを出すことができれば、表示される可能性がはるかに高くなります。

4

1 に答える 1

3

考えられるアプローチ:過去に見積もりが使用された時間の長さで、乱数を掛けたもので並べ替えます。これは、過去のレコードにより大きな重みを与える効果があります。

擬似コードは次のとおりです。

select quote from quotes 
    where current date - display date > 1 week
    order by ((current date - display date - 1 week) * random number) desc
    fetch first row only

これらは非常に変動しやすいため、システムの日付/時刻関数に適合させる必要があります。

rand()多くのシステムでは直接順序付けが機能しないため、各行に乱数を適用するには、おそらく中間ステップを使用する必要があります。

更新:これは実際のMySQLの例です。

于 2013-03-05T11:22:47.503 に答える