2016年11月14日 星期一

【PHP、MySQL】SQL搜尋分段LOG

今天要抓出半年內每個商品被點擊次數,在存入 PROD_CLICK
因為 LOG 量太大,所以每個月都會產生新的表單來儲存
類似:PROD_LOG_1606 ~ PROD_LOG_1612
所以要搜尋半年就會有6個資料表
步驟:
1.依目前日期及指定幾個月算出有幾個資料表
方法很多,可以直接用月份去減,但為了比較活我這邊是用天數去減,
$prod_click_day = $SS->getData('prod_click_day'); // 抓出設定天數
$day = strtotime("-$prod_click_day day"); // 用時間戳記來算差別的日期
$difMonth = date("m",time() - $day); // 算出與面前相差的月份

2.用 for 迴圈與 union all 結合 SQL 語法
for ($i=0;$i<=$difMonth;$i++){
    $addstr = date("ym",strtotime("-$i month"));
    $condition[] = "SELECT product_id FROM PROD_LOG_$addstr"; // 每個SQL加到array
}

$sql_condition = implode('union all',$condition); // 用 union all 相連產生完整SQL語法

3.清空原本資料表並加入新的資料
$TRUNCATE = "TRUNCATE TABLE PROD_CLICK"; // 清空資料表
$db->query($TRUNCATE);

/* 計算總點擊數在存入PROD_CLICK */
$sql = "
INSERT INTO PROD_CLICK (ART_NO,NUM)
SELECT product_id,count(product_id) FROM
(
$sql_condition
) t
GROUP BY product_id
ORDER BY count(product_id) DESC";

$db->query($sql);

沒有留言:

張貼留言