サイトが 1 日ダウンしたらどうなりますか? データベースの壊れた進行を修正するのは誰ですか? 1 月 31 日 (日) に更新を見逃した場合はどうなりますか? すべての値がオフになり、それを修正して楽しんでください。
ビュー カウントは1か所にのみ保存し、必要に応じてそのデータを操作する必要があります。
あなたが持つべきテーブル構造:
TABLE Articles
ID INT PK
...
TABLE Viewcount
Date DATE PK
Article_ID INT PK
NumViews INT
再生回数を更新するには:
INSERT INTO Viewcount (Date, Article_ID, NumViews)
VALUES(TODAY(), 12345, 1)
ON DUPLICATE KEY UPDATE NumViews=NumViews+1
そして、カウントを取得するには:
SELECT ar.ID,
today.numviews as 'today',
yesterday.numviews as 'yesterday',
thisweek.sum as 'week',
thismonth.sum as 'month',
thisyear.sum as 'year',
alltime.sum as 'alltime'
FROM Articles ar LEFT JOIN (
SELECT Article_id, NumViews
FROM Viewcount
WHERE Date = TODAY()
) 'today'
ON ar.ID = today.Article_ID
LEFT JOIN (
SELECT Article_id, NumViews
FROM Viewcount
WHERE Date = DATE_SUB(TODAY(), INTERVAL 1 DAY)
) 'yesterday'
ON ar.ID = yesterday.Article_ID
LEFT JOIN (
SELECT Article_id, SUM(NumViews) 'sum'
FROM Viewcount
WHERE YEAR(Date) = YEAR()
AND WEEK(Date) = WEEK()
GROUP BY Article_ID
) 'thisweek'
ON ar.ID = thisweek.Article_ID
LEFT JOIN (
SELECT Article_id, SUM(NumViews) 'sum'
FROM Viewcount
WHERE YEAR(Date) = YEAR()
AND MONTH(Date) = MONTH()
GROUP BY Article_ID
) 'thismonth'
ON ar.ID = thismonth.Article_ID
LEFT JOIN (
SELECT Article_id, SUM(NumViews) 'sum'
FROM Viewcount
WHERE YEAR(Date) = YEAR()
GROUP BY Article_ID
) 'thisyear'
ON ar.ID = thisyear.Article_ID
LEFT JOIN (
SELECT Article_id, SUM(NumViews) 'sum'
FROM Viewcount
GROUP BY Article_ID
) 'alltime'
ON ar.ID = alltime.Article_ID
または、フェッチしたい期間に対してプログラムで各クエリを実行するだけです。