熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP以指定字段為索引返回數據庫所取的數據數組

2013-11-15 12:28:25  來源: PHP編程 

  很多情況下我們從接觸一個新的項目到開發完成再回過頭來仔細浏覽一下自己寫的代碼很多都是我們以前用熟練的代碼所以在完成每個新項目的時 候適當的做些項目總結代碼總結或許你會在以後的項目中用得著極有可能獲得意外的收獲比如代碼優化想到了更好速度更快的實現方法等等

牛逼的程序開發者有時候不在於代碼量的多少而是程序的代碼簡潔性邏輯復雜但實現的方便性這些才說明是否是一位好的程序員我們不做日夜加班到深夜拼代碼量的程序員!
這篇和大家分享幾個使用得PHP編程技巧有些技巧是在看別人代碼的時候學來的有些是自己總結的

以特定字段為索引返回數據庫取的數據數組
舉個例子容易些
假如你要統計指定站點從其它網站來的流量情況並且做一個小後台查看每個網站每天帶來的流量情況我們先建張數據表
表一站點配置表(只統計這些網站的流量)

復制代碼 代碼如下:
CREATE TABLE `site_config` (
`id` smallint() unsigned NOT NULL auto_increment COMMENT 主鍵自增
`sid` smallint() unsigned NOT NULL COMMENT 網站ID
`site_url` varchar() NOT NULL COMMENT 網站URL地址
`site_name` varchar() NOT NULL COMMENT 網站名稱
`add_time` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT 添加時間
PRIMARY KEY (`id`)
UNIQUE KEY `adid` (`sid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf COMMENT=站點配置表;

  
表二站點流量統計表(來一個用戶一條記錄)

復制代碼 代碼如下:
CREATE TABLE `site_stat` (
`id` int() unsigned NOT NULL auto_increment COMMENT 主鍵自增
`sid` smallint() unsigned NOT NULL COMMENT 網站ID
`ip_address` varchar() NOT NULL COMMENT 用戶IP
`add_time` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT 添加時間
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf COMMENT=站點流量統計表 ;

  
因為site_config表讀操作大於寫操作所以類型設置為MyISAM而site_stat表寫操作大於讀操作因此我把表類型設置為InnoDB(這些地方也是你在設計數據的時候需要考慮的速度提高不少)
回到正題假如表site_config裡有這樣幾條數據
數據格式為idsidsite_urladd_time
baiducom ::
googlecom ::
cnblogscom ::
codejianet ::
站點流量統計表site_stat裡已經產生了一些數據如下
數據格式為idsidip_addressadd_time
::
::
::
::
::
::
::
你在後台需要做的報表格式為日期網站ID網站URL流量數 (沒有流量的站點也要展示流量顯示為
你可能會想到根據日期在表site_stat裡根據sid group by之後再left join表site_config這顯然不是我將分享的方法
條SQL來搞定一條是取所有的站點另一條是取指定日期下站點流量統計數

SQL取所有站點

復制代碼 代碼如下:
SELECT sidsite_urlsite_name FROM site_config

  
SQL取站點統計(假如為今天):

復制代碼 代碼如下:
SELECT sidCOUNT() AS come_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($sqlsid); //站點流量數據以sid為索引返回二維數組

  
最後在展示報表的時候用foreach循環$sites取流量的時候到數組$data裡去取索引為sid的數據就OK了
非常方便並且非常容易掌握我就經常這麼干

最後看下上表的統計結果報表
格式為日期網站ID網站URL流量數
baiducom
googlecom
cnblogscom
codejianet
總結貌似寫這麼多就說明那樣一個小的技巧哈但是可千萬別小看這個技巧能節約你很多時間所以大家在寫代碼的時候多多總結多多來博客園和大家交流學習編程水平一定會進步很快的!


From:http://tw.wingwit.com/Article/program/PHP/201311/21016.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.