1

DBからソート済みリストを返したい。使いたい機能は次のようになります

(field1_value * w1 + field2_value * w2) / ( 1 + currentTime-createTime(field3_value)) 

それはsort by popularity私のアプリケーションの機能のためです。

DB(MySQLなど)で他の人がこの種のソートをどのように行っているのだろうか

最終的にはこれを django に実装する予定ですが、これを達成するための一般的な方向性/戦略に関するコメントは大歓迎です。

  • 関数を定義し、リクエストごとに行のスコアを計算しますか?
  • このスコア用のフィールドを確保し、定期的にスコアを計算しますか?
  • または、並べ替え関数の変数として時間を使用するのは見栄えが悪いですか?
  • 他のサイトは「人気順」をどのように実装していますか?

新しい投稿にもっと注目してもらいたかったので、時間変数を入れました。

4

1 に答える 1

1
  1. 関数を定義し、リクエストごとに行のスコアを計算しますか?

    できますが、必須ではありません。その式をORDER BY句に指定するだけ1 + currentTimeでかまいません (分母の部分は結果の順序に影響しないため、削除しました)。

    ORDER BY (field1 * w1 + field2 * w2) / UNIX_TIMESTAMP(field3) DESC
    

    または、クエリがそのような評価を選択している場合はORDER BY、エイリアス化された列名のみを使用できます。

    ORDER BY rating
    
  2. このスコア用のフィールドを確保し、定期的にスコアを計算しますか?

    定期的に計算する必要がある理由はわかりません (上記のように、分母の定数部分は結果の順序に影響しません)。ただし、上記の式の結果を独自のフィールドがある場合、ORDER BY操作の実行は非常に高速になります (特に、その新しいフィールドが適切にインデックス化されている場合)。

于 2012-11-30T09:40:57.320 に答える