1. 程式人生 > >Linux下通過php對Mysql中的資料進行定時統計併入庫

Linux下通過php對Mysql中的資料進行定時統計併入庫

本文講解Linux下對資料庫的資料進行統計計算並將結果入庫到另一個表中。本文分3部分進行講解:第一部分介紹:linux下執行php的命令;第二部分介紹:通過指令碼實現統計前幾個月的資料併入庫;第三部分介紹:如何實現每日凌晨對昨日的資料進行統計併入庫。

1.Linux下執行php的命令

linux下執行php檔案的命令為:php filename arguments

即:php 檔名 引數

Eg/usr/local/php/bin/php /home/zhaolincheung/insert_talkcountdata.php

2.通過指令碼實現統計前幾個月的資料併入庫

例如,將之前60天內的資料統計入庫。

首先,寫一個shell檔案talkcount_insert_db.sh,迴圈計算日期,並將該日期傳給php檔案,進行統計併入庫。shell如下:

#!/bin/sh
for((i=1;i<=60;i++));
do
    echo -e $i":";
    day=`date -d "-"$i" day" +%Y-%m-%d`;
    /usr/local/php/bin/php /home/zhaolincheung/insert_talkcountdata.php $day;
    echo "";
done

而insert_talkcountdata.php是對某一天的資料統計併入庫,如下:

<?php
  include_once('/data/analys/DB/MyDB.class.php');
  
    //定義大類的編號
    $cidArr = array(0,2,1,11,15,14,7,6,4,12,5,13,16,3,9,1001,1002);

    $yesterday = $_SERVER["argv"][1]; //獲取php執行檔案的引數
    echo $yesterday . "\n";

    //遍歷大類併入庫
    foreach($cidArr as $cid){
        //統計大類
        insert_db($cid,$yesterday); 
    }
    
    //根據指定的大類和日期,計算該天的訊息量併入庫
    function insert_db($category, $date){
        $dateArr = explode("-", $date);
        if(checkdate($dateArr[1], $dateArr[2], $dateArr[0]) == false){
            return false;
        }
        //將日期轉為時間戳
        $thisdate = mktime(0, 0, 0, $dateArr[1], $dateArr[2], $dateArr[0]);
        $nextdate = $thisdate + 3600 * 24;

        $sql = "select talkid,count(*) as msgcount from table1 where postcategoryid=$category ";
        $sql .= " and updatetime >= $thisdate and updatetime < $nextdate group by talkid order by msgcount desc";

        $db = new MyDB();
        $res = $db->query($sql);
        
	    //初始化關聯陣列
        $mc["c20"]=$mc["c10"]=$mc["c6"]=$mc["c5"]=$mc["c4"]=$mc["c3"]=$mc["c2"]=$mc["c1"]=0;
        //分段統計訊息數對應的會話數
        while(($result = $db->fetch_assoc($res))) 
        {
          $msgcount = $result["msgcount"];
          if($msgcount > 20)
            $mc["c20"]++;
          else if($msgcount > 10 && $msgcount <= 20)
            $mc["c10"]++;
          else if($msgcount >= 6 && $msgcount <= 10)
            $mc["c6"]++;
          else if($msgcount == 5)
            $mc["c5"]++;
          else if($msgcount == 4)
            $mc["c4"]++;
          else if($msgcount == 3)
            $mc["c3"]++;
          else if($msgcount == 2)
            $mc["c2"]++;
          else if($msgcount == 1)
            $mc["c1"]++;
        }
        
        //insert table 'talkcount'
        $sql_insert = "insert into talkcount(analysisdate,postcategoryid,c20,c10,c6,c5,c4,c3,c2,c1) values('";
        $sql_insert .= $date . "',";
        $sql_insert .= $category . ",";
        $sql_insert .= $mc["c20"] . ",";
        $sql_insert .= $mc["c10"] . ",";
        $sql_insert .= $mc["c6"] . ",";
        $sql_insert .= $mc["c5"] . ",";
        $sql_insert .= $mc["c4"] . ",";
        $sql_insert .= $mc["c3"] . ",";
        $sql_insert .= $mc["c2"] . ",";
        $sql_insert .= $mc["c1"] . ")";
        
	    echo $sql_insert . "\n";
        
        $db->query($sql_insert);
        
	    $db->close();
    }
?>

3.如何實現每日凌晨對昨日的資料進行統計併入庫

另外,每日凌晨都需要將昨日的資料進行計算併入庫。這裡可以採用crontab -e命令,在計劃任務中加入要執行的php檔案。如:

0 5 * * * /usr/local/php/bin/php /data/analys/php/talkcount_Insertdb.php

表示每天凌晨五點執行/data/analys/php目錄下的talkcount_Insertdb.php這個檔案。

talkcount_Insertdb.php的內容如下:

<?php
  include_once('/data/analys/DB/MyDB.class.php');
  
    //定義大類的編號
    $cidArr = array(0,2,1,11,15,14,7,6,4,12,5,13,16,3,9,1001,1002);

    $yesterday = date("Y-m-d",strtotime("-1 day")); //計算昨天的日期
    echo $yesterday . "\n";

    //遍歷大類併入庫
    foreach($cidArr as $cid){
        //統計大類
        insert_db($cid,$yesterday); 
    }
    
    //根據指定的大類和日期,計算該天的訊息量併入庫
    function insert_db($category, $date){
        $dateArr = explode("-", $date);
        if(checkdate($dateArr[1], $dateArr[2], $dateArr[0]) == false){
            return false;
        }
        //將日期轉為時間戳
        $thisdate = mktime(0, 0, 0, $dateArr[1], $dateArr[2], $dateArr[0]);
        $nextdate = $thisdate + 3600 * 24;

        $sql = "select talkid,count(*) as msgcount from table1 where postcategoryid=$category ";
        $sql .= " and updatetime >= $thisdate and updatetime < $nextdate group by talkid order by msgcount desc";

        $db = new MyDB();
        $res = $db->query($sql);
        
	    //初始化關聯陣列
        $mc["c20"]=$mc["c10"]=$mc["c6"]=$mc["c5"]=$mc["c4"]=$mc["c3"]=$mc["c2"]=$mc["c1"]=0;
        //分段統計訊息數對應的會話數
        while(($result = $db->fetch_assoc($res))) 
        {
          $msgcount = $result["msgcount"];
          if($msgcount > 20)
            $mc["c20"]++;
          else if($msgcount > 10 && $msgcount <= 20)
            $mc["c10"]++;
          else if($msgcount >= 6 && $msgcount <= 10)
            $mc["c6"]++;
          else if($msgcount == 5)
            $mc["c5"]++;
          else if($msgcount == 4)
            $mc["c4"]++;
          else if($msgcount == 3)
            $mc["c3"]++;
          else if($msgcount == 2)
            $mc["c2"]++;
          else if($msgcount == 1)
            $mc["c1"]++;
        }
        
        //insert table 'talkcount'
        $sql_insert = "insert into talkcount(analysisdate,postcategoryid,c20,c10,c6,c5,c4,c3,c2,c1) values('";
        $sql_insert .= $date . "',";
        $sql_insert .= $category . ",";
        $sql_insert .= $mc["c20"] . ",";
        $sql_insert .= $mc["c10"] . ",";
        $sql_insert .= $mc["c6"] . ",";
        $sql_insert .= $mc["c5"] . ",";
        $sql_insert .= $mc["c4"] . ",";
        $sql_insert .= $mc["c3"] . ",";
        $sql_insert .= $mc["c2"] . ",";
        $sql_insert .= $mc["c1"] . ")";
        
	    echo $sql_insert . "\n";
        
        $db->query($sql_insert);
        
	    $db->close();
    }
?>




相關推薦

Linux通過phpMysql資料進行定時統計入庫

本文講解Linux下對資料庫的資料進行統計計算並將結果入庫到另一個表中。本文分3部分進行講解:第一部分介紹:linux下執行php的命令;第二部分介紹:通過指令碼實現統計前幾個月的資料併入庫;第三部分介紹:如何實現每日凌晨對昨日的資料進行統計併入庫。 1.Linux下執行

Linux通過shell進MySQL執行SQL或匯入指令碼

這條命令表示通過使用者名稱和密碼執行shell然後在shell裡面執行一個建表語句: USER="root" PASS="root" mysql -u $USER -p$PASS <<EOF 2> /dev/null CREATE DATABASE um; EOF 下面的命令在登陸My

Linux通過mysqldump備份MySQL資料庫成sql檔案

階段1:傻瓜式全備份   mysqldump -h ip地址 -uusername -ppassword -A >~/name.sql   此種情況將整個資料庫(結構和資料)匯出備份成一個sql檔案   階段2:適當的調整引數達到不同的備份效果   我們先help一下   mysqldump --hel

如何在linux系統phpmysql命令加入到環境變數的方法

如何在linux系統下將php和mysql命令加入到環境變數中的方法 如何插入一段漂亮的程式碼片 修改 /etc/profile檔案使其永久性生效,並對所有系統使用者生效,在檔案末尾加上如下兩行程式碼 vim /etc/profile PATH=$PATH:/usr/local/

MySQL資料的操作

新增 使用INSERT語句進行新增 INSERT INTO <表名>(欄位1,欄位2) VALUES(資料1,資料2); 現在有如下student表: 執行INSERT INTO student(id,NAME) VALUE

linux通過yum倉庫安裝mysql

linux mysql 倉庫 環境:Centos6.5查看centos版本:[[email protected]/* */ ~]# cat /etc/redhat-release CentOS release 6.5 (Final)1.查看是否安裝了mysql[[email 

linux通過phpize為php在不重新編譯php情況安裝模塊memcache

memcache with tps emca 添加 pecl inux usr ron 通過phpize為php在不重新編譯php情況下安裝模塊memcache 1. 下載 wget http://pecl.php.net/get/memcache-2.2.4.tgz

Linux安裝PHP並在nginx服務器進行配置的詳細方法

devel direct emca red pca pic 占用 amp entos 先介紹一下使用的環境:centos 7.4,  PHP 7.0 ,  nginx 1.12 Linux系統版本可以通過命令:lsb_release -a 查看. 現在開始步入正題了! 1.

記錄linux通過limits的設置來優化系統性能

pgrep 目前 接下來 total 滿足 執行 獲取 linux下 第一個 系統中子進程繼承父進程的系統限制。只有以root用戶運行的進程能任意修改限制。其它進程不能增加硬限制值。這樣在一個session中登錄進程設置的硬限制值影響該session中的所有進程。 當要優化

linux匯入、匯出mysql資料庫命令的實現方法

首先建空資料庫 mysql>create database abc; 匯入資料庫 mysql>use abc; 設定資料庫編碼 mysql>set names utf8; 匯入資料(注意sql檔案的路徑) mysql>source /home/abc/abc.sql;

linux匯出匯入遠端資料庫資料

1.在linux終端輸入以下命令進行資料庫的匯出:  ls : 查詢所在資料夾中的檔案 mysqldump -h 所要連線的資料庫的IP地址(如果是本機的話就是:127.0.0.1) -u使用者名稱 -p使用者密碼  在連線的資料庫中所要匯出的資料庫的名字 >

PythonMySQL讀取的資料進行json化

對MySQL中讀取的資料進行json化 資料格式: ((cluster1,db1,tb1), (cluster1,db1,tb2), (cluster1,db1,tb3), (cluster1,db2,tb3), (cluster2,db3,tb5), (cluster3,db4

Linux通過logrotate定時清理壓縮軟體日誌,如mysql、nginx、tomcat

tomcat日誌如果放任不管,那麼日誌檔案會越來越大,檢視起來也不方便。另外,如果catalina.out的大小超過了2G,那麼tomcat可能在沒有錯誤提示的情況下崩潰、無法啟動。 所以為了避免出現這個問題,我們應該每天分割catalina.out,logrotate就

LinuxNginx+PHP+Mysql環境搭建過程(圖文)

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-de

Windows/Linux 檢視Apache、MysqlPHP版本

做程式開發,我們免不了要知道開發環境下的Apache、Mysql、PHP版本,下面就三項在Windows和Linux下如何進行版本檢視進行展開。 1、Apache (1) Windows檢視Apache版本: 使用命令:httpd -v   (2) Linux

PHP判斷mysql資料表是否存在

PHP中判斷表是否存在的方法: if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '". $table."'")==1) {     echo "Table exists"; } else {     echo "Table

Linux安裝PHP的lua擴展庫

directory http ash make try 不安裝 .net ges 執行 一、安裝Lua 5.3.4 下載 http://www.lua.org/ftp/lua-5.3.4.tar.gz tar xvf lua-5.3.4.tar.gz cd lua

安卓端通過httpMysql進行增刪改查

name 交流 shm != 用戶 習慣 cti -perm 得到 各類it學習視頻,大家都可以看看哦!我自己本人都是通過這些來學習it只知識的! 下面是視頻鏈接轉自:http://www.cnblogs.com/wangying222/p/5492935.html ht

Linux通過find命令進行rm文件刪除的小技巧

ase test sysconfig ger sdn tun 執行過程 fun alt 我們常常會通過find命令進行批量操作。如:批量刪除舊文件、批量改動、基於時間的文件統計、基於文件大小的文件統計等。在這些操作其中,因為rm刪除操作會導致文件夾結構變化,

linux 如何查看mysql跑了哪些服務

位置 netstat host 導致 pro ive comm http lin ps -ef|grep mysql //現查處PID 然後 lsof -p +pid 就可以看到mysql跑的服務 百度出了別人的方法 當遇到mysql很卡,然後又想知