各位大大好
小弟最近在練習寫一些報表
內容是計算一段時間內所有超商內訂票系統中演唱會票和展覽票的銷售情況
資料來源是每一筆的交易明細
資料庫不小 大概有4000多個表
此報表只引用三個 門市 交易紀錄 訂票紀錄(還未付錢)
資料表內容也蠻多的 大概有600萬以上的資料
報表大概長這樣(簡化版):
區域 營業部 已付演唱會票數量 已付展覽票數量 未付演唱會票數量 未付展覽票數量
北區一部
北區 北區二部
北區三部
中區一部
中區 中區二部
中區三部
東區 東區一部
南區一部
南區 南區二部
我是已經完成了
不過我是用迴圈去跑所有的銷售狀況
流程大概是以下這樣:
先找出所有門市
在去針對每個門市 去搜尋它們在這段期間演唱會票和展覽會票的交易和訂票紀錄
所以會變成
while(門市):
select 演唱會票,展覽會票 from 銷售 where 門市
select 演唱會票,展覽會票 from 訂票 where 門市
也就是說 我是一列一列找資料並統整後印出來
而我的前輩有提供另外一種做法
是用陣列的方式去做的
流程就會變成這樣:
找出所有門市 => 放到以門市為索引的陣列中
找出演唱會票,展覽會票 from 銷售 => 比對門市索引放到陣列中
找出演唱會票,展覽會票 from 訂票 => 比對門市索引放到陣列中
最後再一個一個刻在表格中
最後結果
他幾乎開了網頁大概1-2秒就有資料
我的作法比他慢了大概8-10秒
這應該就是O(n^2)和O(n)的差距!?
只是他的code裡面有2-6維陣列的存在 還有陣列中的陣列
比較不直觀這樣
單純只是好奇
我明白我可能講的也沒有很清楚
我的問題其實就是下方敘述這樣
在不考慮動到DB的情況下
一般大大都會使用什麼樣的做法來寫報表
提供給小弟參考
我直覺,效能差異在 sql 的撰寫上,
sql 寫得好,600 萬筆資料不算什麼。
至於報表方面,我個人是 100% 利用 phpexcel 來做,
會計小姐最愛了,因為它便於二次加工。
效能差異在 sql 的撰寫上
可是我用phpmyadmin開這個資料庫都要等個十幾秒@@
而且其實我跟他的sql寫的差不多哈哈
利用 phpexcel 來做
這我有用過 不過我都用來讀檔把資料寫進資料庫
或把資料寫入檔案
由於報表要掛在網上
類似線上報表那樣
這個好像就用不太到!?
可是我用phpmyadmin開這個資料庫都要等個十幾秒@@
那是因為4000多個表,phpmyadmin要讀取相關訊息,自然要用許多時間,可以當您下sql指令時,理當不必用到這麼多個。
報表做成excel用不用得到?您去問會計小姐就知道了,看她們是喜歡掛在網上的,還是可以再加工的excel。
我的重點其實是在【再加工】三個字,您給小姐excel,小地方她可以自己修一下,不用每次都要找您動手。
我的重點其實是在【再加工】三個字
我懂大大您意思
就是別人自己可以客製自己要的東西
因為一方面我不是做給會計的
是做給行銷的
這會是一個視覺化的報表那樣
不會隨意去變動他的欄位或位置
若是像一些財產 報稅等的報表 我確實也是用跟大大一樣的方法
其實我只是想問如果在用程式寫的報表情況下
各位大大的做法 讓小弟開開眼界而已XDD
group by
哈哈 那大大我誤會您意思了
我以為 您這樣講的意思是 兩種方法都可以用
哪來兩種,就一個select, 需要 group by就 group by,
需要order by 就order by.
select是核心.
https://ithelp.ithome.com.tw/articles/10230125
有 group by 也有 order by, 看看囉.
我的建議是...盡量少用程式寫報表, 因為改動頻率算大,
最好善用報表工具,
PHP-https://www.brilliantcode.net/550/php-reports-reporting-service-with-php/
SSRS, FineReport..etc
先感謝大大的回覆
PHP-https://www.brilliantcode.net/550/php-reports-reporting-service-with-php/
PHP-Report前面player大大也有提供過
我自己有下來用用看
SSRS
主機那邊不是SQL Server QQ
用mysql配phpmyadmin
FineReport
這好像是個人化的!?
盡量少用程式寫報表
那若是要寫那種掛在網上的報表呢
這樣說好了, 報表工具都可以去連非自己的DB,
可以連結多資料庫組裝, 連MySQL, SQL Server , Oracle..etc
掛在網上的報表, 可以跟報表工具請求報表產生崁入網頁,
可以跟報表工具請求報表產生崁入網頁
那這樣真的值得好好研究一下
感謝大大