第一、phpmyadmin 的查詢結(jié)果顯示了分頁數(shù)據(jù)、總條數(shù)信息及索引信息,看似只執(zhí)行了一次查詢,實際上是做了多次查詢的,只是頁面中沒顯示出來,但是查看 mysql 的運行日志就會發(fā)現(xiàn),其實已經(jīng)執(zhí)行了很多條 sql 語句,因為 phpmyadmin 的操作基本都是批量執(zhí)行增刪改查的;

成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、隆林網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5技術(shù)、購物商城網(wǎng)站建設、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為隆林等各大城市提供網(wǎng)站開發(fā)制作服務。
第二、有一種方式可以實現(xiàn)只查詢一次就能達到分頁的效果,但實際上這種方式是不推薦的,性能比查詢兩次(一次查總數(shù),一次查分頁數(shù)據(jù))低了很多,尤其在數(shù)據(jù)量越大的時候差異越明顯;
一次查詢的思路是:一次性把滿足條件的數(shù)據(jù)全都查出來,然后再從結(jié)果中去取實際分頁中要顯示的那部分數(shù)據(jù);例如,根據(jù)標題搜索數(shù)據(jù),每頁顯示20條,一次性總共查出來 1000 條數(shù)據(jù),顯示第一頁的時候就只獲取前面的20條,第二頁就取第21-40條,第三頁就只取41-60條,后面的依次類推。
可想而知,這種查詢是很浪費的,我明明只要那一部分數(shù)據(jù),卻查出了所有的,剩下那部分就根本沒用。尤其在數(shù)據(jù)量大的時候,上萬條百萬條等等,性能就更差了,如果再加上高并發(fā),那基本就要崩潰了。
所以做分頁一般都是查兩次比查一次好得多
thinkphp如何查詢數(shù)據(jù)庫?
數(shù)據(jù)庫查詢
ThinkPHP內(nèi)置了非常靈活的查詢方法,可以快速的進行數(shù)據(jù)查詢操作。
查詢條件可以用于CURD等任何操作,作為where方法的參數(shù)傳入即可。
ThinkPHP可以支持直接使用字符串作為查詢條件,但是大多數(shù)情況推薦使用索引數(shù)組或者對象來作為查詢條件,因為會更加安全。
查詢方式
一、使用字符串作為查詢條件
這是最傳統(tǒng)的方式,但是安全性不高,例如:
1
2
$User = M("User"); // 實例化User對象
$User-where('type=1 AND status=1')-select();
最后生成的SQL語句是
1
SELECT * FROM think_user WHERE type=1 AND status=1
二、使用數(shù)組作為查詢條件
1
2
3
4
5
$User = M("User"); // 實例化User對象
$condition['name'] = 'thinkphp';
$condition['status'] = 1;
// 把查詢條件傳入查詢方法
$User-where($condition)-select();
最后生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' AND status=1
如果進行多字段查詢,那么字段之間的默認邏輯關系是 邏輯與 AND,但是用下面的規(guī)則可以更改默認的邏輯判斷,通過使用 _logic 定義查詢邏輯:
1
2
3
4
5
6
$User = M("User"); // 實例化User對象
$condition['name'] = 'thinkphp';
$condition['account'] = 'thinkphp';
$condition['_logic'] = 'OR'; //定義查詢邏輯
// 把查詢條件傳入查詢方法
$User-where($condition)-select();
最后生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' OR `account`='thinkphp'
三、使用對象方式來查詢 (這里以stdClass內(nèi)置對象為例)
1
2
3
4
5
6
$User = M("User"); // 實例化User對象
// 定義查詢條件
$condition = new stdClass();
$condition-name = 'thinkphp';
$condition-status= 1;
$User-where($condition)-select();
最后生成的SQL語句和上面一樣
1
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
使用對象方式查詢和使用數(shù)組查詢的效果是相同的,并且是可以互換的,大多數(shù)情況下,我們建議采用數(shù)組方式更加高效,后面我們會以數(shù)組方式為例來講解具體的查詢語言用法。
表達式查詢
上面的查詢條件僅僅是一個簡單的相等判斷,可以使用查詢表達式支持更多的SQL查詢語法,并且可以用于數(shù)組或者對象方式的查詢(下面僅以數(shù)組方式為例說明),查詢表達式的使用格式:
1
$map['字段名'] = array('表達式','查詢條件');
表達式不分大小寫,支持的查詢表達式有下面幾種,分別表示的含義是:
1
2
3
4
$map['id']? = array('eq',100);? id = 100;
$map['id']? = array('egt',100);id = 100
$map['name'] = array('like','thinkphp%'); name like 'thinkphp%' 模糊查詢
$map['a'] =array('like',array('%thinkphp%','%tp'),'OR');$map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND'); (a like '%thinkphp%' OR a like '%tp') AND (b not like '%thinkphp%' AND b not like '%tp')
本文來自ThinkPHP框架技術(shù)文章欄目:
以上就是thinkphp如何查詢數(shù)據(jù)庫的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!
寫法不對,你可以吧like直接寫在where中
$db=M('ThemeCards')-where("like '%".$search."%'")-find();
三種方法:
【一】像你這種aa前后都是特殊字符,而且最外側(cè)是雙引號的可以直接寫變量名
$result?=?mysql_query("SELECT?*?FROM?table1?WHERE?name?LIKE?'%$var%'");
【二】也可以使用點連接符對字符串進行連接:
$result?=?mysql_query("SELECT?*?FROM?table1?WHERE?name?LIKE?'%"?.?$var?.?"%'");
【三】可以使用{}代碼域來分隔變量名,這種用法更適用于變量后有數(shù)字、字母、下劃線的情況,它可以明確地將變量與字符串區(qū)分開來:
$result?=?mysql_query("SELECT?*?FROM?table1?WHERE?name?LIKE?'%{$var}%'");
標題名稱:php數(shù)據(jù)庫like PHP數(shù)據(jù)庫連接失敗的原因及解決方法
文章鏈接:http://chinadenli.net/article18/dojiegp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、小程序開發(fā)、、品牌網(wǎng)站制作、電子商務、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)