前提・実現したいこと
ランキングを集計したいのですが、調べた記事に疑問がございます。
日間から週間への集計データはどのように移行すればいいのでしょうか?
一案としてのテーブル構造
さきほどのリンクにはこちらの図が掲載されています。
右のratingは当日の集計で、左のaggregate_pointsは日間、週刊、月間の集計です。
例えばユーザーに「今週のfavorite順」を表示するなら、左のaggregate_pointsのfavorite_weeklyを参照すればいいことになります。
不明な点
しかし不明な点があります。日間の更新はわかりますが、週間の更新がわからないのです。
例えば本日(火曜)の深夜0時にaggregate_pointsのfavorite_dailyを更新したい場合、ratingのfavorite_countをコピーすればいいとわかりますが、
ではそのとき、aggregate_pointsのfavorite_weelkyはどのように計算すればいいのでしょうか?
aggregate_pointsのfavorite_weelkyは直近7日間(「先週の火曜の、ratingのfavorite_count」から「今週の月曜の、ratingのfavorite_count」の合計)が入っている現状に対し、「本日のratingのfavorite_count」を加算しつつ、「先週の火曜の、ratingのfavorite_count」を除算しなければならないと思うのですが、いったい「先週の火曜の、ratingのfavorite_count」はどうやって得ればいいのか?というのが不明です。
それが得られなければ、favorite_weelkyを直近7日間とすることができないように思います。
###具体的な数字
具体的に言えば、aggregate_pointsのfavorite_weelkyが40だとして、それは以下のように日々のratingのfavorite_countが加算された結果だとします。
|曜日|火|水|木|金|土|日|月|
|:--|:--|:--:|--:|
|ratingのfavorite_count|10|5|5|5|5|5|5|
仮に「本日のratingのfavorite_count」が20ならば
現状の週間(40) + 日間(20) - 週間の最古の値(10) = 50
がaggregate_pointsのfavorite_weelkyに上書きしたいはずですが、この10はどうやって得ればいいのか?というのが不明です。
上記解決策がわかる方、ないし別のテーブル設計の案をお持ちの方いらっしゃいましたら一計を頂戴できましたら幸いでございます。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー