PHP+MySQL實現對一段時間內每天數據統計優化操作實例

2021-03-02 PHP自學中心


點擊上面關注我關注我喲

小編 隔天推送php教程,php技巧,php視頻教程,MySQL,筆試題等諸多優質內容,最接地氣、重服務的本地微信平臺!關注我們妥妥沒錯!

(商務合作聯繫QQ號:2230304070


http://www.jb51.net/article/136685.htm

這篇文章主要介紹了PHP+MySQL實現對一段時間內每天數據統計優化操作,結合具體實例形式分析了php針對mysql查詢統計相關優化操作技巧,需要的朋友可以參考下

在網際網路項目中,對項目的數據分析必不可少。通常會統計某一段時間內每天數據總計變化趨勢調整營銷策略。下面來看以下案例。

案例

在電商平臺中通常會有訂單表,記錄所有訂單信息。現在我們需要統計某個月份每天訂單數及銷售金額數據從而繪製出如下統計圖,進行數據分析。

訂單表數據結構如下:

order_idorder_sntotal_priceenterdate25396A4E610E250C2D378D7EC94179E14617F2306.002017-04-01 17:23:2625397EAD217C0533455EECDDE39659ABCDAE917.902017-04-01 22:15:1825398032E6941DAD44F29651B53C41F6B48A0163.032017-04-02 07:24:36

此時查詢某月各天下單數,總金額應當如何做呢?

一般方法

首先最容易想到的方法,先利用 php 函數 cal_days_in_month() 獲取當月天數,然後構造一個當月所有天的數組,然後在循環中查詢每天的總數,構造新數組。

代碼如下:


$month = '04';

$year = '2017';

$max_day = cal_days_in_month(CAL_GREGORIAN, $month, $year);  

$days_arr = array();

for($i=1;$i<=$max_day;$i++){

  array_push($days_arr, $i);

}

$return = array();

foreach ($days_arr as $val){

  $min = $year.'-'.$month.'-'.$val.' 00:00:00';

  $max = $year.'-'.$month.'-'.$val.' 23:59:59';

  $sql = "select count(*) as total_num,sum(`total_price`) as amount from `orders` where `enterdate` >= {$min} and `enterdate` <= {$max}";

  $return[] = mysqli_query($sql);

}

return $return;

這個sql簡單,但是每次需要進行30次查詢請,嚴重拖慢響應時間。

優化

如何使用一個sql直接查詢出各天的數量總計呢?

此時需要利用 mysql 的 date_format 函數,在子查詢中先查出當月所有訂單,並將 enterdate 用 date_format 函數轉換為 天 ,然後按天 group by 分組統計。 代碼如下:


$month = '04';

$year = '2017';

$max_day = cal_days_in_month(CAL_GREGORIAN, $month, $year);  

$min = $year.'-'.$month.'-01 00:00:00';

$max = $year.'-'.$month.'-'.$max_day.' 23:59:59';

$sql = "select t.enterdate,count(*) as total_num,sum(t.total_price) as amount (select date_format(enterdate,'%e') as enterdate,total_price from orders where enterdate between {$min} and {$max}) t group by t.enterdate order by t.enterdate";

$return = mysqli_query($sql);

如此,將30次查詢減少到1次,響應時間會大大提高。

注意:

1.由於需查詢當月所有數據,在數據量過大時,不宜採取本方法。

2.為避免當天沒有數據而造成的數據缺失,在查詢後,理應根據需求對數據進行處理。

以下二維碼是小編的微信號,小編也會每天把文章和視頻教程都分享在朋友圈,有需要的友友可以加小編一起學習!

相關焦點

  • 實例,PHP+MySql 實現簡單的分頁功能
    1、mysql limit 用法SELECT * FROM table limit [offset,] count;參數:SELECT * FROM user limit 10,10; // 查詢 11-20 這 10 條數據2、實現原理首先獲取從頁面傳來的頁數(即第幾頁),然後計算開始位置,再從資料庫查詢當前頁數應顯示的數據,最後循環輸出並顯示在頁面上。
  • 實例,PHP統計查詢關鍵字出現的次數
    實例說明在站內搜索中,我們往往需要列出許多符合條件的關鍵字有多少個。本例通過字符串函數 substr_count()統計查詢字符串出現的次數,運行結果如下圖所示:實現過程創建腳本 index.php 文件。首先,預定義字符串變量,編寫form表單。
  • php mysql PDO 查詢操作的實例詳解
    http://www.jb51.net/article/124388.htm這篇文章主要介紹了php mysql PDO
  • OpenResty、PHP-fpm與NodeJs操作MySQL的性能對比
    的投遞今天agentzh在微博上公布了一些OpenResty 與 php-fpm、Nodejs操作MySQL的性能評測數據。agentzh:我剛才在對比測試大結果集查詢時,發現NodeJS在使用 node-mysql庫訪問MySQL時,上下文切換次數居高不下,都快趕上 php-fpm + php-mysql了。
  • php與MySQL(基本操作)
    $conn){die("Connection failed: " . mysqli_connect_error());}創建資料庫mysqli_query()在php中,執行mysql語句,都要用到mysqli_query()方法。
  • [精選] MySQL分庫分表後用PHP如何來完美操作
    用戶類庫、商品類庫、訂單類庫、日誌類、統計類庫...2)按日期分表一些日誌、統計類的可以按年、月、日、周分表如:點擊量統計click_201901、click_2019023)使用mysql的merge先把分表創建好,然後創建總表指定engine= MERGE UNION=(table1,table2) INSERT_METHOD = LAST;
  • (進階篇)PHP+Mysql+jQuery實現查詢和列表框選擇操作
    本文講解如何通過ajax查詢mysql數據,並將返回的數據顯示在待選列表中,再通過選擇最終將選項加入到已選區,可以用在許多後臺管理系統中。本文列表框的操作依賴jquery插件:Multiselect。這個要從Multiselect插件說起,Multiselect插件其實就是將一個列表框裝換成左右兩個列表框,已供相關操作,通過查看其插件代碼不難發現,左邊的列表框名為:liOptionms2side__sx,右邊列表框(已選區)名為:liOptionms2side__dx,後面會用到。PHP首先來看action.php的處理。第一步是連接資料庫。
  • mysql大表中count()的用法以及mysql中count()的優化
    本篇文章給大家帶來的內容是關於mysql大表中count()的用法以及mysql中count()的優化,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。一個單表中包含有6000w+的數據,然而你又不能拆分.需要分別統計表中有多少數據,A產品有多少,B產品有多少這幾個數據.
  • MySQL分頁優化解析
    在有索引的情況下,limit m,n速度足夠,可是在複雜條件搜索時,where somthing order by somefield+somefieldmysql會搜遍資料庫,找出「所有」符合條件的記錄,然後取出m,n條記錄。如果你的數據量有幾十萬條,用戶又搜索一些很通俗的詞,然後要依次讀最後幾頁重溫舊夢。mysql該很悲壯的不停操作硬碟。
  • MySQL優化原理分析及優化方案總結
    這個結果是根據一些列的統計信息計算得來的,這些統計信息包括:每張表或者索引的頁面個數、索引的基數、索引和數據行的長度、索引的分布情況等等。有非常多的原因會導致MySQL選擇錯誤的執行計劃,比如統計信息不準確、不會考慮不受其控制的操作成本(用戶自定義函數、存儲過程)、MySQL認為的最優跟我們想的不一樣(我們希望執行時間儘可能短,但MySQL值選擇它認為成本小的,但成本小並不意味著執行時間短)等等。
  • PHP學習資料推薦(書籍篇)
    書與書之前也有差別,以下推薦主要是名著,能有效傳輸知識書籍,涵蓋前端,軟體工程,微服務,分布式系統,高流量網站建設,php基礎,php框架源碼解讀,php內核解讀,redis應用,運維以及優化和內核解讀,mongodb基礎,分片,集群,mysql基礎,innodb源碼解讀,mysql配置,語句,索引優化,nginx應用,配置優化,源碼解讀,linux 網絡編程,c語言基礎,算法(c描述),tcp/http
  • mysql實現php函數explode功能mysql_explode
    我article表中的記錄如下,因為多個關鍵詞存放在一個欄位上,不利於做排序統計操作,例如我想要統計哪個關鍵詞的數量最多就是個大問題了:id keywords1 九陽神功,萬川歸海,橫掃千軍,乾坤大挪移2 殺破狼,落日十三劍
  • PHP面試題集
    (1分)成對出現$a = <<EODgood testEOD;20、談談asp,php,jsp的優缺點(1分)asp是需要依賴IIS,是微軟開發的語言php和jsp可以依賴apache或者 nginx等其他伺服器21、談談對mvc的認識(1分)model : 數據結構層
  • 新手必須要懂的PHP學習路線以及10個PHP優化技巧
    (1周)jquery實戰演習(1月)用zf框架,開發模塊,達到靈活掌握必須掌握的知識點:資料庫必須熟練掌握 mysql & sqlserver,同時必須熟練zendstdio的操作。熟練進行phpmyadmin的操作。
  • 一個簡單QQ群聊案例代碼解析(PHP實現)
    問題:使用面向對象編程的方式實現以下業務邏輯:1. 張三使用帳號a,密碼b登錄了qq2. 顯示出張三最後的登錄的時間3. 張三查看了 1小時內的行政部門群的信息(這個群裡有張三,李四,王五,其中張三是群主)4. 輸出張三看到的這些信息5.
  • 360 私有雲平臺 MySQL 自動化實現剖析
    這樣每臺伺服器理論分配的資料庫實例和對應消耗的資源是可控的。同時,我們對伺服器實際消耗的資源進行動態統計分析,並對健康狀態進行打分,這樣進一步來控制伺服器的資源使用。自動關聯監控系統比不可少,第一時間將資料庫實例納入監控體系,並且在管理員維護操作的時候可以靈活啟停監控。
  • PHP 使用 Swoole - TaskWorker 實現異步操作 Mysql
    要實現上述的異步處理,只需要增加兩個事件回調即可:onTask 和 onFinish, 這兩個回調函數分別用於執行 Task 任務和處理 Task 任務的返回結果。另外還需要在 set 方法中設置 task 進程數量。
  • Mysql 手工注入【常規union查詢篇】
    >截取指定字符串,注意在mysql中的所有字符串截取操作[除了limit],默認都是從1開始的,並非像代碼中的數組是從0開始的substring(要截取的字符串,從什麼地方開始截取,截取多長)mysql> select substring((select username from admin limit 0,1),1,1);
  • MySQL數據克隆的用戶權限設計
    從安全上,支持數據操作日誌審計,提供庫/表訪問過濾,隨機虛擬環境和臨時密碼交付,此外會對虛擬環境使用時長進行限制,儘可能保證數據的使用安全。SQL優化,壓測等5)指定大表的變更和數據操作影響評估6)數據補丁合併,基於業務邏輯的數據操作和數據補丁整理整個實現的過程有很多考慮的細節,不過還是在設計和實現中由同事和我一併解決了。
  • PHP資料庫編程之MySQL優化策略概述
    為了提升PHP的運行效率,程式設計師不光需要寫出邏輯清晰,效率很高的代碼,還要能對query語句進行優化。雖然我們對資料庫的讀取寫入速度上卻是無能為力,但在一些資料庫類擴展像memcache、mongodb、redis這樣的數據存儲伺服器的幫助下,PHP也能達到更快的存取速度,所以了解學習這些擴展也是非常必要,這一篇先說一下MySQL常見的優化策略。