product_date_added
フィールドである各製品には、Date
追加された日付が含まれていました。また、商品が何回表示されたかを含むフィールドもproduct_views
あります。int
商品を人気順に表示するために、商品の 1 日あたりのヒット数を計算するアルゴリズムを使用します。
SELECT
AVG(product_views / DATEDIFF(NOW(), product_date_added)) as avg_hits
, product_table.*
FROM product_table
WHERE product_available = "yes"
GROUP BY product_id
ORDER BY avg_hits DESC
これは機能しますが、上司は、多くの古い製品が最初に表示されることに気付きました. したがって、彼は基本的に、新しいビューが古いビューよりも重みを持つことを望んでいます。
彼の提案は、1 年以上前のビューはカウントされないというものでした。そのためには、すべてのビューの日付を保持する必要があると思います。これにより、パフォーマンスが低下すると思います。
上司が求めているような人気アルゴリズムを作成する最良の方法は何ですか?
理想的には、テーブル構造を変更しないものを思いつきたいと思っています。それが不可能な場合は、少なくとも既存のデータを使用できるソリューションを考え出して、0 から始めないようにしたいと思います。