2013-10-18 41 views
-5

我正在嘗試在PHP中編寫一些代碼,這將允許我在上個星期,每月,每年等網站上獲得前10個網頁。目前,每天的頁面瀏覽量都存儲在一個表格中。每行都包含頁面ID,當天0:00的unix時間戳和當天的瀏覽量。我如何通過ID(PHP)添加和排序MySQL結果

因此,要完成我想要的操作,我需要選擇此表中的所有行(對於我給定的時間範圍),然後將每個行的瀏覽量與相同的頁面id相加,然後對其進行高度排序低。我不能想到這樣做的方式,並不是瘋狂複雜的循環。任何人對我有一些想法?

謝謝!

+0

你能告訴我們你到目前爲止寫了什麼嗎? – TimSPQR

+1

學習DAY,MONTH,YEAR,GROUP BY,COUNT和ORDER BY函數關閉MYSQL –

回答

2

最簡單的方法可能是簡單地做每個時間段查詢你想

SELECT page_id, SUM(pageviews) 
FROM table 
WHERE 
time BETWEEN yourstarttime AND NOW(); 
GROUP BY page_id 
ORDER BY SUM(pageviews); 

yourstarttime,比如說,過去的一年是DATE_SUB(NOW(), INTERVAL 1 YEAR)獲得去年的種種罪狀。

+1

我相信你需要'pageviews'的SUM()而不是'COUNT()',因爲每行都包含數字當天的頁面瀏覽量。 – Linger

+0

@Linger Ack。發現得好。定影。 – Jim

+0

爲什麼簡單並不總是最好的..即使覆蓋索引觸發了臨時表和文件夾(快速排序)傳遞的需要,這對於大型表格(以及網絡流量表可以並且將會很大)也很難。檢查http://www.sqlfiddle.com/#!2/018c69/1 ..問題是組合關閉GROUP BY page_id/ORDER BY SUM(pageviews)更好的選項可以派生表 –

0

看一看DATE_SUB

SELECT * 
FROM `yourTable` 
WHERE `some_time` < DATE_SUB(NOW(), INTERVAL 2 WEEK); 

(隨着 「2周」 是你需要什麼)。