008. 數(shù)據(jù)庫的數(shù)據(jù)查詢
于2013年成立成都創(chuàng)新互聯(lián)專注于”幫助中小企業(yè)+互聯(lián)網(wǎng)”, 也是目前成都地區(qū)具有實(shí)力的互聯(lián)網(wǎng)服務(wù)商。團(tuán)隊致力于為企業(yè)提供--站式網(wǎng)站建設(shè)、移動端應(yīng)用( H5手機(jī)營銷、重慶APP開發(fā)、微信開發(fā))、軟件開發(fā)、信息化解決方案等服務(wù)。
本節(jié)課我們來了解一下數(shù)據(jù)庫的數(shù)據(jù)查詢方式,單數(shù)據(jù)、數(shù)據(jù)集和其它查詢。
一.單數(shù)據(jù)查詢
1. Db::table()中table必須指定完整數(shù)據(jù)表(包括前綴);
2. 如果希望只查詢一條數(shù)據(jù),可以使用find()方法,需指定where條件;
Db::table('tp_user')-where('id', 27)-find()
3. Db::getLastSql()方法,可以得到最近一條SQL查詢的原生語句;
SELECT * FROM `tp_user` LIMIT 1
4. 沒有查詢到任何值,則返回null;
5. 使用findOrFail()方法同樣可以查詢一條數(shù)據(jù),在沒有數(shù)據(jù)時拋出一個異常;
Db::table('tp_user')-where('id', 1)-findOrFail()
6. 使用findOrEmpty()方法也可以查詢一條數(shù)據(jù),但在沒有數(shù)據(jù)時返回一個空數(shù)組;
7. Db::table('tp_user')-where('id', 1)-findOrEmpty();
二.數(shù)據(jù)集查詢
1. 想要獲取多列數(shù)據(jù),可以使用select()方法;
Db::table('tp_user')-select(); SELECT * FROM `tp_user`
2. 多列數(shù)據(jù)在查詢不到任何數(shù)據(jù)時返回空數(shù)組,使用selectOrFail()拋出異常; Db::table('tp_user')-where('id', 1)-selectOrFail();
3. 在select()方法后再使用toArray()方法,可以將數(shù)據(jù)集對象轉(zhuǎn)化為數(shù)組;
4. 當(dāng)在數(shù)據(jù)庫配置文件中設(shè)置了前綴,那么我們可以使用name()方法忽略前綴; Db::name('user')-select();
三.其它查詢
1. 通過value()方法,可以查詢指定字段的值(單個),沒有數(shù)據(jù)返回null;
Db::name('user')-where('id', 27)-value('username');
$user = Db::table('tp_user')-select()-toArray(); dump($user);
2. 通過colunm()方法,可以查詢指定列的值(多個),沒有數(shù)據(jù)返回空數(shù)組; Db::name('user')-column('username');
3. 可以指定id作為列值的索引;
4. 如果處理的數(shù)據(jù)量巨大,成百上千那種,一次性讀取有可能會導(dǎo)致內(nèi)存開銷過大;
5. 為了避免內(nèi)存處理太多數(shù)據(jù)出錯,可以使用chunk()方法分批處理數(shù)據(jù);
6. 比如,每次只處理100條,處理完畢后,再讀取100條繼續(xù)處理;
7. 可以利用游標(biāo)查詢功能,可以大幅度減少海量數(shù)據(jù)的內(nèi)存開銷,它利用了PHP生成器特性。每次查詢只讀一行,然后再讀取時,自動定位到下一行繼續(xù)讀取;
Db::name('user')-column('username', 'id');
Db::table('tp_user')-chunk(3, function($users) { foreach ($users as $user) {
dump($user);
}
echo 1; });
$cursor = Db::table('tp_user')-cursor(); foreach($cursor as $user){
dump($user);
}
辦法就是一次性全查詢出來,然后用PHP程序來處理,優(yōu)點(diǎn)是減少數(shù)據(jù)庫連接查詢次數(shù),提高效率,缺點(diǎn)就是,有可能會多寫一部分php代碼??偟膩碚fphp的處理速度要比循環(huán)查詢要效率高。
要想提高你的PHP編程能力,你可以做兩件事情:1)更扎實(shí)的掌握基本編程技能;2)更細(xì)微、更深入地了解PHP。
以下總結(jié)出的幾條指南導(dǎo)航將有助于提高開發(fā)者的PHP編程能力:
一、提高PHP編碼能力的10個細(xì)節(jié)
或許你并不能從這些細(xì)節(jié)中學(xué)到絕對新的東西(例如“如何對變量和函數(shù)做好的命名”,“對代碼做好注釋”,“頻繁測試代碼”),而它們可以讓你鞏固基礎(chǔ)知識。以下幾點(diǎn)解釋了為什么最好的普通編程實(shí)踐在PHP應(yīng)用軟件開發(fā)中尤為重要。
其中10點(diǎn)建議分別為:
1)如何開始良好的開發(fā)風(fēng)格;
2)合適的變量及函數(shù)命名;
3)注釋代碼;
4)自己動手做大部分的工作;
5)多方涉獵;
6)了解開發(fā)語言的局限性;
7)接受結(jié)構(gòu)上的意見反饋;
8)頻繁的測試代碼;
9)在自己的工程上內(nèi)嵌程序;
10)不要把每一個文件都分一個文件夾
二、寫出更優(yōu)PHP代碼的7條法則
以下7種方法列舉出了PHP開發(fā)商極有可能面對的問題(例如不使用模板,不合適的封裝,在增刪修改時PHP和SQL的混淆使用等等),對于那些很有可能危害到PHP應(yīng)用程序運(yùn)行的各種復(fù)雜語句,該指南也提供了多種方法來清除(例如對大容量的網(wǎng)頁減少數(shù)據(jù)庫查詢)。
以下是關(guān)鍵點(diǎn):
1)在模板中使用可選擇的PHP語法;
2)封裝所有的東西;
3)使用一個數(shù)據(jù)庫對象;
4)使用增刪查改功能;
5)與調(diào)試為友;
6)重視命名;
7)減少數(shù)據(jù)庫查詢。