欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP以指定字段為索引返回?cái)?shù)據(jù)庫所取的數(shù)據(jù)數(shù)組

 更新時(shí)間:2013年06月30日 18:17:18   投稿:whsnow  
本文與大家分享幾個(gè)使用得PHP編程技巧,有些技巧是在看別人代碼的時(shí)候?qū)W來的,有些是自己總結(jié)的,下面為大家介紹下以特定字段為索引,返回?cái)?shù)據(jù)庫取的數(shù)據(jù)數(shù)組,感興趣的朋友可以了解下哈

很多情況下,我們從接觸一個(gè)新的項(xiàng)目到開發(fā)完成,再回過頭來仔細(xì)瀏覽一下自己寫的代碼,很多都是我們以前用熟練的代碼。所以,在完成每個(gè)新項(xiàng)目的時(shí) 候,適當(dāng)?shù)淖鲂╉?xiàng)目總結(jié)、代碼總結(jié),或許你會(huì)在以后的項(xiàng)目中用得著,極有可能獲得意外的收獲,比如:代碼優(yōu)化,想到了更好、速度更快的實(shí)現(xiàn)方法等等。

程序開發(fā)者有時(shí)候不在于代碼量的多少,而是程序的代碼簡潔性、邏輯復(fù)雜但實(shí)現(xiàn)的方便性,這些才說明是否是一位好的程序員。我們不做日夜加班到深夜,拼代碼量的程序員!
這篇和大家分享幾個(gè)使用得PHP編程技巧,有些技巧是在看別人代碼的時(shí)候?qū)W來的,有些是自己總結(jié)的。

以特定字段為索引,返回?cái)?shù)據(jù)庫取的數(shù)據(jù)數(shù)組
舉個(gè)例子容易些:
假如你要統(tǒng)計(jì)指定站點(diǎn)從其它網(wǎng)站來的流量情況,并且做一個(gè)小后臺(tái),查看每個(gè)網(wǎng)站每天帶來的流量情況。我們先建2張數(shù)據(jù)表:
表一、站點(diǎn)配置表(只統(tǒng)計(jì)這些網(wǎng)站的流量)

復(fù)制代碼 代碼如下:

CREATE TABLE `site_config` (
`id` smallint(5) unsigned NOT NULL auto_increment COMMENT '主鍵,自增',
`sid` smallint(5) unsigned NOT NULL COMMENT '網(wǎng)站ID',
`site_url` varchar(128) NOT NULL COMMENT '網(wǎng)站URL地址',
`site_name` varchar(80) NOT NULL COMMENT '網(wǎng)站名稱',
`add_time` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT '添加時(shí)間',
PRIMARY KEY (`id`),
UNIQUE KEY `adid` (`sid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='站點(diǎn)配置表';

表二、站點(diǎn)流量統(tǒng)計(jì)表(來一個(gè)用戶一條記錄)
復(fù)制代碼 代碼如下:

CREATE TABLE `site_stat` (
`id` int(11) unsigned NOT NULL auto_increment COMMENT '主鍵,自增',
`sid` smallint(5) unsigned NOT NULL COMMENT '網(wǎng)站ID',
`ip_address` varchar(32) NOT NULL COMMENT '用戶IP',
`add_time` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT '添加時(shí)間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='站點(diǎn)流量統(tǒng)計(jì)表' ;

因?yàn)閟ite_config表讀操作大于寫操作,所以類型設(shè)置為MyISAM;而site_stat表寫操作大于讀操作,因此,我把表類型設(shè)置為InnoDB。(這些地方也是你在設(shè)計(jì)數(shù)據(jù)的時(shí)候需要考慮的,速度提高不少)。
回到正題,假如表site_config里有這樣幾條數(shù)據(jù):
數(shù)據(jù)格式為: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
站點(diǎn)流量統(tǒng)計(jì)表site_stat里已經(jīng)產(chǎn)生了一些數(shù)據(jù),如下:
數(shù)據(jù)格式為: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
你在后臺(tái)需要做的報(bào)表格式為:日期,網(wǎng)站ID,網(wǎng)站URL,流量數(shù) (沒有流量的站點(diǎn)也要展示,流量顯示為0)
你可能會(huì)想到根據(jù)日期,在表site_stat根據(jù)sid group by之后再left join表site_config,這顯然不是我將分享的方法。
用2條SQL來搞定,一條是取所有的站點(diǎn);另一條是取指定日期下站點(diǎn)流量統(tǒng)計(jì)數(shù)。

SQL1取所有站點(diǎn):
復(fù)制代碼 代碼如下:

SELECT sid,site_url,site_name FROM site_config

SQL2取站點(diǎn)統(tǒng)計(jì)(假如為今天):
復(fù)制代碼 代碼如下:

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

前面說了一大堆都是為后面做鋪墊,分享一個(gè)PHP以傳過去的字段為索引,返回二維數(shù)組的方法:
復(fù)制代碼 代碼如下:

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傳進(jìn)入,并把需要索引的字段傳進(jìn)入就OK,前提是傳進(jìn)去的字段必須要在select返回的字段里。
我們在取所有站點(diǎn)的時(shí)候不需要傳過去字段,但在取站點(diǎn)流量統(tǒng)計(jì)的時(shí)候我們把,站點(diǎn)sid傳過去,即如下:
復(fù)制代碼 代碼如下:

$sites = getList($sql1); //所有站點(diǎn)
$data = getList($sql2,'sid'); //站點(diǎn)流量數(shù)據(jù),以sid為索引返回二維數(shù)組

最后在展示報(bào)表的時(shí)候,用foreach循環(huán)$sites,取流量的時(shí)候到數(shù)組$data里去取索引為sid的數(shù)據(jù)就OK了。
非常方便,并且非常容易掌握,我就經(jīng)常這么干。

最后看下上表的統(tǒng)計(jì)結(jié)果報(bào)表:
格式為:日期,網(wǎng)站ID,網(wǎng)站URL,流量數(shù)
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
總結(jié):貌似寫這么多就說明那樣一個(gè)小的技巧哈,但是,可千萬別小看這個(gè)技巧,能節(jié)約你很多時(shí)間。所以,大家在寫代碼的時(shí)候多多總結(jié),多多來博客園和大家交流、學(xué)習(xí),編程水平一定會(huì)進(jìn)步很快的!

相關(guān)文章

  • header跳轉(zhuǎn)和include包含問題詳解

    header跳轉(zhuǎn)和include包含問題詳解

    昨天下班后,同事反映,最近上線的幾款游戲海外注冊載入不了樣式文件,需要緊急修復(fù)
    2012-09-09
  • PHP面向?qū)ο缶幊炭焖偃腴T

    PHP面向?qū)ο缶幊炭焖偃腴T

    PHP面向?qū)ο缶幊炭焖偃腴T...
    2006-12-12
  • PHP使用ODBC連接數(shù)據(jù)庫的方法

    PHP使用ODBC連接數(shù)據(jù)庫的方法

    這篇文章主要介紹了PHP使用ODBC連接數(shù)據(jù)庫的方法,涉及php使用ODBC操作數(shù)據(jù)庫的基本技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Javascript與PHP驗(yàn)證用戶輸入U(xiǎn)RL地址是否正確

    Javascript與PHP驗(yàn)證用戶輸入U(xiǎn)RL地址是否正確

    這篇文章主要介紹了Javascript與PHP驗(yàn)證用戶輸入U(xiǎn)RL地址是否正確,在進(jìn)行web應(yīng)用程序開發(fā)時(shí)非常實(shí)用,需要的朋友可以參考下
    2014-10-10
  • PHP curl_setopt()函數(shù)實(shí)例代碼與參數(shù)分析

    PHP curl_setopt()函數(shù)實(shí)例代碼與參數(shù)分析

    curl_setopt()函數(shù)將為一個(gè)CURL會(huì)話設(shè)置選項(xiàng)。option參數(shù)是你想要的設(shè)置,value是這個(gè)選項(xiàng)給定的值。
    2011-06-06
  • php彈出提示框的是實(shí)例寫法

    php彈出提示框的是實(shí)例寫法

    在本篇文章里小編給大家整理的是關(guān)于php如何彈出提示框的相關(guān)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-09-09
  • PHP使用Swagger生成好看的API文檔

    PHP使用Swagger生成好看的API文檔

    api文檔不能根據(jù)代碼的變化發(fā)生實(shí)時(shí)動(dòng)態(tài)的改變,這樣后端修改了接口,前端不能及時(shí)獲取最新的接口,導(dǎo)致調(diào)用出錯(cuò),需要手動(dòng)維護(hù)api文檔,加大了開發(fā)的工作量和困難,而swagger的出現(xiàn)就是為了解決這一系列的問題
    2023-02-02
  • php刪除二維數(shù)組中的重復(fù)值方法

    php刪除二維數(shù)組中的重復(fù)值方法

    下面小編就為大家分享一篇php刪除二維數(shù)組中的重復(fù)值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 調(diào)試PHP程序的多種方法介紹

    調(diào)試PHP程序的多種方法介紹

    這篇文章主要介紹了調(diào)試PHP程序的多種方法介紹,本文講解了PHP自帶的調(diào)試功能、引進(jìn)調(diào)試工具、調(diào)試業(yè)務(wù)邏輯錯(cuò)誤、調(diào)試非功能性的錯(cuò)誤等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • 學(xué)習(xí)php筆記 字符串處理

    學(xué)習(xí)php筆記 字符串處理

    學(xué)習(xí)php筆記 字符串處理,需要的朋友可以參考下。
    2010-10-10

最新評(píng)論