-
PHP编程技能:以指定字段为索引返回数组数据
添加时间:2013-7-1 点击量:很多景象下,我们从接触一个新的项目到开辟完成,再回过火来细心浏览一下本身写的代码,很多都是我们以前用谙练的代码。所以,在完成每个新项目标时 候,恰当的做些项目总结、代码总结,或许你会在今后的项目顶用得着,极有可能获合不测的收成,比如:代码优化,想到了更好、速度更快的实现办法等等。
的法度开辟者有时辰不在于代码量的几许,而是法度的代码简洁性、逻辑错杂但实现的便利性,这些才申明是否是一位好的法度员。我们不做日夜加班到深夜,拼代码量的法度员!
这篇博客和大师分享几个应用得PHP编程技能,有些技能是在看别人代码的时辰学来的,有些是本身总结的。
以特定字段为索引,返回数据库取的数据数组
举个例子轻易些:
假如你要统计指定站点从其它网站来的流量景象,并且做一个小后台,查看每个网站天天带来的流量景象。我们先建2张数据表:
表一、站点设备表(只统计这些网站的流量)
CREATE TABLE `site_config` (
`id` smallint(5) unsigned NOT NULL auto_increment COMMENT 主键,自增,
`sid` smallint(5) unsigned NOT NULL COMMENT 网站ID,
`site_url` varchar(128) NOT NULL COMMENT 网站URL地址,
`site_name` varchar(80) NOT NULL COMMENT 网站名称,
`add_time` timestamp NOT NULL default CURRENT_TIMESP COMMENT 添加时候,
PRIMARY KEY (`id`),
UNIQUE KEY `adid` (`sid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=站点设备表;表二、站点流量统计表(来一个用户一笔记录)
CREATE TABLE `site_stat` (
`id` int(11) unsigned NOT NULL auto_increment COMMENT 主键,自增,
`sid` smallint(5) unsigned NOT NULL COMMENT 网站ID,
`ip_address` varchar(32) NOT NULL COMMENT 用户IP,
`add_time` timestamp NOT NULL default CURRENT_TIMESP COMMENT 添加时候,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=站点流量统计表 ;
因为site_config表读操纵大于写操纵,所以类型设置为MyISAM;而site_stat表写操纵大于读操纵,是以,我把表类型设置为InnoDB。(这些处所也是你在设计数据的时辰须要推敲的,速度进步不少)。
回到正题,假如表site_config里有如许几条数据:
数据格局为:id,sid,site_url,add_time
1,200,baidu.com,2013-06-30 14:20:00
2,201,google.com,2013-06-30 14:20:00
3,202,cnblogs.com,2013-06-30 14:20:00
4,203,codejia.net,2013-06-30 14:20:00
站点流量统计表site_stat里已经产生了一些数据,如下:
数据格局为:id,sid,ip_address,add_time
1,200,167.87.32.4,2013-06-30 14:40:00
2,200,192.168.11.56,2013-06-30 14:40:10
3,202,167.87.32.4,2013-06-30 14:40:10
4,202,192.168.11.56,2013-06-30 14:40:20
5,203,167.87.32.4,2013-06-30 14:40:20
6,202,10.10.10.10,2013-06-30 14:40:30
7,200,167.87.32.4,2013-06-30 14:40:31
你在后台须要做的报表格局为:日期,网站ID,网站URL,流量数 (没有流量的站点也要显现,流量显示为0)
你可能会想到按照日期,在表site_stat里按照sid group by之后再left join表site_config,这显然不是我将分享的办法。
用2条SQL来搞定,一条是取所有的站点;另一条是取指定日期下站点流量统计数。
SQL1取所有站点:
SELECT sid,site_url,site_name FROM site_config
SQL2取站点统计(假如为今天):
SELECT sid,COUNT(1) AS come_total FROM site_stat
WHERE add_time>=2013-06-30 00:00:00
AND add_time<=2013-06-30 23:59:59
GROUP BY sid前面说了一大堆都是为后面做铺垫,分享一个PHP以传畴昔的字段为索引,返回二维数组的办法:
protected function getList(¥sql,¥filed = null){
¥res = mysql_query(¥sql,¥this->link_sc);
¥data = array();
if(¥filed === null){
while(¥row = mysql_fetch_assoc(¥res)){
¥data[] = ¥row;
}
}else{
while(¥row = mysql_fetch_assoc(¥res)){
¥data[¥row[¥filed]] = ¥row;
}
}
return ¥data;
}
把你的SQL传进入,并把须要索引的字段传进入就OK,前提是传进去的字段必必要在返回的字段里。
我们在取所有站点的时辰不须要传畴昔字段,但在取站点流量统计的时辰我们把,站点sid传畴昔,即如下:
¥sites = getList(¥sql1); //所有站点
¥data = getList(¥sql2,sid); //站点流量数据,以sid为索引返回二维数组最后在显现报表的时辰,用foreach轮回¥sites,取流量的时辰到数组¥data里去取索引为sid的数据就OK了。
很是便利,并且很是轻易把握,我就经常这么干。
最后看下上表的统计成果报表:
格局为:日期,网站ID,网站URL,流量数
2013-06-30,200,baidu.com,3
2013-06-30,201,google.com,0
2013-06-30,202,cnblogs.com,3
2013-06-30,203,codejia.net,1
总结:貌似写这么多就申明那样一个小的技能哈,然则,可切切别小看这个技能,能节俭你很多时候。所以,大师在写代码的时辰多多总结,多多来博客园和大师交换、进修,编程程度必然会进步很快的!
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》