关于统计
统计这个功能相信是很多系统里都会有的,简单的统计或许只是简单的group by 一下,但复杂的统计可能会让大多数开发者很头疼,尤其是涉及到统计多张表且相对独立的时候,下面就我的个人经历说一下统计的方法吧:
一开始的时候说要统计我是拒绝的,因为有的统计实在是太复杂了,对当时用的tp3还不精,复杂点的sql也写不了,即使能用sql语句写出来,把他换成tp的代码并辅以动态条件也感觉很难(其实就是太懒了,其实大多数的统计需求都能以一个sql语句完成,而转换成php语句无非就是利用tp的union和join将查询完的子查询组装起来而已),于是我当时为了“省事”决定先把统计的一列数据查出来,然后再foreach这列数据,依据他们关联数据将其他的统计列数据一个一个的处理,这样做看起来”简单“实则加重了数据库的的负担,因为这样查询由1次变为N+1次,N为foreach循环的次数,导致查询效率极低。
后来“习得”了tp的子查询和union和join“神奇”的用法,将sql语句变为可操纵的php代码就变得简单了,于是我可以用一条sql查询了,事后我还对比了一下查询速度,虽然只有几条数据,但查询时间还是缩短了一半。
随着数据库数据数据量的增多和统计业务逻辑变得复杂,“一条sql”的查询时间也变得慢了起来,于是就有了“统计表”,就是根据统计的需求设计相应的统计表,每天统计一下并写入数据表,这样依据日期的统计就变得简单了,统计sql的复杂度瞬间就降了一个量级,速度也快了好多,而统计表数据的写入可以写一个脚本,设置一个定时任务每天执行一下即可。