文章點擊周排行、月排行榜功能開發總結,預備知識:group by,MYSQL函數week()、month(),下面我們以一個示例來分析如何開發一個對文章進行周排行,月排行的功能。
在設計數據庫時一般都有一個字段來記錄文章的點擊率,如果我們要統計一周或一個月點擊率排行光靠這一個字段是肯定是無法實現的。這時就要新建一個表,用來記錄每篇文章每天的點擊率。假設這個表名為ranking,定義四個字段:rid(表ID),contentid(與文章ID關聯),hits(記錄每天點擊率),date(時間,重要,查詢時作比較)
ranking大致結構
id contentid hits date
1 2 12 2014-12-18
2 2 23 2014-12-19
3 1 15 2014-12-19
4 2 21 2014-12-20
一、統計
第一步就是要記錄文章每天的點擊率,這步非常簡單,當用戶查看某篇文章時,PHP程序會進行一次數據庫查詢,判斷是否存在該條記錄,如果不存在,說明是當天第一次浏覽該文章,需要插入一條記錄,後面的訪客再看這篇文章時,只要更新點擊率就行。這就是記錄某篇文章一天的點擊率。
$date = date("Y-m-d",time());
$contentid = $_GET[id];//當前文章ID
$query = mysql_query("select * from ranking where contentid='$contentid' and date='$date'); //查詢數據庫
if($value = mysql_fetch_array($query)){
mysql_query("update ranking set hits = hits+1 where id='$value[id]' ");//如果有記錄,只需點擊率+1
}else{
mysql_query("insert into ranking (`contentid`,`hits`,`date`) values('$contentid','1','$date')");//如果是第一次浏覽,插入一條數據,點擊率為1
}
二、查詢
此時統計工作已經完成,接下來要把這些文章按一周或一個月點擊率總和的順序查詢出來,這是個難點。
1.先要給文章分組並計算總點擊率:
select *,sum(hits) from ranking group by contentid order by sum(hits) desc
2.取本周數據篩選出來:
select *,sum(hits) from ranking where week(date)=week(now()) group by contentid order by sum(hits) desc
這是周排行的查詢語句,相對比較復雜,查詢出來後再放到數組中依次顯示出來,月排行也是這樣,換一下函數就行,完整的PHP代碼我就不寫出來了。
*