2013-04-08 25 views
0

我有一個計數查詢,用於統計用戶查看其他用戶配置文件的次數。 它目前只是統計表中的所有行,但我想知道是否有一種方法在PHP中使用計算,說從星期一到星期日的表'ptb_profile_views'中的所有行計數,然後再從0開始以下星期一和統計當週的所有值,並不包括從前一週的任何計數,即時通訊不知道這是可能的想法,因爲它需要一段時間的內存方面它,統計本週的mysql值,然後從星期一開始再次計數?

另一個選項,我想知道是否是一個mysql語句,我可以添加說每個星期天在00:00 AM從ptb_profile_views刪除所有,然後我們開始新鮮的星期一。

有人可以幫我與任何形式的解決方案,謝謝

我的表如下所示:

id | profile_id | viewed_id 

1   4     8 
2   5     6 

MySQL的

function check_profile_views() { 
      global $connection; 
      global $_SESSION; 
      $query = "SELECT COUNT(DISTINCT profile_id) totalCOUNT FROM ptb_profile_views WHERE viewed_profile_id=".$_SESSION['user_id']." AND profile_id!='-1'"; 
      $check_profile_views_set = mysql_query($query, $connection); 
      confirm_query($check_profile_views_set); 
      return $check_profile_views_set;   
     } 

PHP

<? 
    $check_profile_views_set = check_profile_views(); 
    while ($views = mysql_fetch_array($check_profile_views_set)) { 

    echo"".$views['totalCOUNT'].""; } ?> 
+0

您可以通過將「日期/日期時間」列添加到「ptb_profile_views」表中來解決此問題。然後你可以按日期選擇它們。 「 – Bart 2013-04-08 20:14:52

+0

」每個星期天00:00 AM刪除全部來自ptb_profile_views,然後我們從星期一開始新鮮「。您可以制定一個計劃過程來完成這項工作(研究Windows的schtasks),但您應該在刪除之前將其插入日誌表中,以便採取更好的措施。另外,你的SQL似乎缺少一些會導致執行錯誤的空格('... DISTINCT profile_id)totalCOUNT FROM ...') – 2013-04-08 20:15:23

回答

0

你可以按d篩選每週,每週,例如,

SELECT count(*), YEAR(datefield), WEEK_OF_YEAR(datefield) 
FROM yourtable 
GROUP BY YEAR(datefield), WEEK_OF_YEAR(datefield) 

刪除邏輯將類似。刪除在這一年有一年的一週中,早於「本週」的所有記錄,然後也由往年刪除所有記錄:

DELETE FROM yourtable 
WHERE (YEAR(datefield) < YEAR(now())) 
    OR (YEAR(datefield) = YEAR(now()) AND (WEEK_OF_YEAR(datefield) < WEEK_OF_YEAR(now())) 
0

既然你提到你不跟上日期時間歷史因爲每次有人訪問個人資料但只計數時,唯一的解決方案是每個星期一00:00重置您的計數器。

你可以用cron作業來做到這一點。您應該能夠從主機管理面板創建一個。

或者,您可以每週一自行運行cron-page以重置計數器。

如果您想讓事情變得更加複雜,您可以在cron-page創建/更新日誌文件的位置保留總訪問次數。

但是,最好的解決方案是重新考慮你的數據庫設計,並創建一個表格,用恰當的日期時間很好地記錄每次訪問。

相關問題