数据库字段什么情况要索引 PHP以指定字段为索引返回数据库所取的数据数组
PHP以指定字段为索引返回数据库所取的数据数组
很多情况下 我们从接触一个新的项目到开发完成 再回过头来仔细浏览一下自己写的代码 很多都是我们以前用熟练的代码 所以 在完成每个新项目的时 候 适当的做些项目总结 代码总结 或许你会在以后的项目中用得着 极有可能获得意外的收获 比如 代码优化 想到了更好 速度更快的实现方法等等 牛逼的程序开发者有时候不在于代码量的多少 而是程序的代码简洁性 逻辑复杂但实现的方便性 这些才说明是否是一位好的程序员 我们不做日夜加班到深夜 拼代码量的程序员! 这篇和大家分享几个使用得PHP编程技巧 有些技巧是在看别人代码的时候学来的 有些是自己总结的 以特定字段为索引 返回数据库取的数据数组 举个例子容易些 假如你要统计指定站点从其它网站来的流量情况 并且做一个小后台 查看每个网站每天带来的流量情况 我们先建 张数据表 表一 站点配置表(只统计这些网站的流量)

复制代码 代码如下: CREATE TABLE `site_config` ( `id` smallint( ) unsigned NOT NULL auto_increment MENT 主键 自增 `sid` smallint( ) unsigned NOT NULL MENT 网站ID `site_url` varchar( ) NOT NULL MENT 网站URL地址 `site_name` varchar( ) NOT NULL MENT 网站名称 `add_time` timestamp NOT NULL default CURRENT_TIMESTAMP MENT 添加时间 PRIMARY KEY (`id`) UNIQUE KEY `adid` (`sid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf MENT= 站点配置表 ;
表二 站点流量统计表(来一个用户一条记录)
复制代码 代码如下: CREATE TABLE `site_stat` ( `id` int( ) unsigned NOT NULL auto_increment MENT 主键 自增 `sid` smallint( ) unsigned NOT NULL MENT 网站ID `ip_address` varchar( ) NOT NULL MENT 用户IP `add_time` timestamp NOT NULL default CURRENT_TIMESTAMP MENT 添加时间 PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf MENT= 站点流量统计表 ;因为site_config表读操作大于写操作 所以类型设置为MyISAM 而site_stat表写操作大于读操作 因此 我把表类型设置为InnoDB (这些地方也是你在设计数据的时候需要考虑的 速度提高不少) 回到正题 假如表site_config里有这样几条数据 数据格式为 id sid site_url add_time baidu : : google : : cnblogs : : codejia net : : 站点流量统计表site_stat里已经产生了一些数据 如下 数据格式为 id sid ip_address add_time : : : : : : : : : : : : : : 你在后台需要做的报表格式为 日期 网站ID 网站URL 流量数 (没有流量的站点也要展示 流量显示为 ) 你可能会想到根据日期 在表site_stat里根据sid group by之后再left join表site_config 这显然不是我将分享的方法 用 条SQL来搞定 一条是取所有的站点 另一条是取指定日期下站点流量统计数 SQL 取所有站点
复制代码 代码如下: SELECT sid site_url site_name FROM site_configSQL 取站点统计(假如为今天):
复制代码 代码如下: SELECT sid COUNT( ) AS e_total FROM site_stat WHERE add_time>= : : AND add_time<= : : 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 前提是传进去的字段必须要在select返回的字段里 我们在取所有站点的时候不需要传过去字段 但在取站点流量统计的时候我们把 站点sid传过去 即如下
复制代码 代码如下: $sites = getList($sql ); //所有站点 $data = getList($sql sid ); //站点流量数据 以sid为索引返回二维数组 lishixinzhi/Article/program/PHP/201311/21016