周排行、月排行榜開發總結

y0umer發表於2011-03-10

預備知識:group by,MYSQL函式week()、month()

在設計資料庫時一般都有一個欄位來記錄文章的點選率,如果我們要統計一週或一個月點選率排行光靠這一個欄位是肯定是無法實現的。這時就要新建一個表,用來記錄每篇文章每天的點選率。
假設這個表名為ranking,定義四個欄位:rid(表ID),contentid(與文章ID關聯),hits(記錄每天點選率),date(時間,重要,查詢時作比較)
ranking大致結構
id      contentid      hits      date
1       2                   12        2010-12-18
2       2                   23        2010-12-19
3       1                   15        2010-12-19
4       2                   21       2010-12-20
一、統計
第一步就是要記錄文章每天的點選率,這步非常簡單,當使用者檢視某篇文章時,PHP程式會進行一次資料庫查詢,判斷是否存在該條記錄,如果不存在,說明是當天第一次瀏覽該文章,需要插入一條記錄,後面的訪客再看這篇文章時,只要更新點選率就行。這就是記錄某篇文章一天的點選率。
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程式碼我就不寫出來了。
 


相關文章