一、快捷查詢
快捷查詢方式是一種多字段查詢的簡化寫法,在多個字段之間用'|'隔開表示OR,用'&'
隔開表示 AND。
1.不同字段相同查詢條件
在 Home/controller/UserController.class.php 中插入
//使用相同查詢條件 $user = M('User'); $map['user|email'] = '蠟筆小新'; //'|'換成'&'變成AND var_dump($user->where($map)->select());
這時在瀏覽器下調試的結果圖中顯示為:
2.不同字段不同查詢條件
//使用不同查詢條件 $user = M('User'); $map['id&user'] = array(1,'蠟筆小新', '_multi'=> true ); var_dump($user->where($map)->select());
PS:設置'_multi'為 true,是為了讓 id 對應 1,讓 user 對應'蠟筆小新',否則就
會出現 id 對應了 1 還要對應'蠟筆小新'的情況。而且,這設置要在放在數組最后。
如果不加 '_multi'=> true 這行語句,則在調試中為:
//支持使用表達式結合快捷查詢 $user = M('User'); $map['id&user'] = array( array('gt', 0),'蠟筆小新','_multi'=> true); var_dump($user->where($map)->select());
其中 array('gt', 0) 在上一篇已經講過了,是指大于0的數據,即id大于0的數據都符合條件
二、區間查詢
ThinkPHP 支持對某個字段的區間查詢。
//區間查詢 $user = M('User'); $map['id'] = array( array('gt', 1), array('lt', 4)); var_dump($user->where($map)->select());
即為符合id大于1且小于4的數據
//第三個參數設置邏輯OR $user = M('User'); $map['id'] = array( array('gt', 1), array('lt', 4), 'OR'); var_dump($user->where($map)->select());
這是符合id大于1或者id小于4的數據。
三、組合查詢
組合查詢是基于索引數組查詢方式的一個擴展性查詢,添加了字符串查詢(_string)、復
合查詢(_complex)、請求字符串查詢(_query),由于采用的是索引數組,重復的會被覆蓋。
1、字符串查詢(_string)
//字符串查詢(_string) $user = M('User'); $map['id'] = array('eq', 1); $map['_string'] ='user="蠟筆小新" AND email="xiaoxin@163.com"'; var_dump($user->where($map)->select());
這時瀏覽器中調試的SQL查詢方式為:
看到查詢語句中的user和email都沒有類似單引號``(鍵盤上1的左邊的那個符號),這樣的查詢方式不大安全;
2、請求字符串查詢(_query)
//請求字符串查詢(_query) $user = M('User'); $map['id'] = array('eq', 1); $map['_query'] ='user=蠟筆小新&email=xiaoxin@163.com&_logic=OR'; var_dump($user->where($map)->select());
這樣的方式比較好用,也可以叫URL查詢方式,只用&符號就可以,也不用添加單引號,且SQL的查詢方式為:
可以看到這時候查詢的語句中user和email都加上了``,這樣的查詢方式也比較安全。
另外說明一點的就是
$user = M('User'); $map['id']=array('eq',1); $map['id']=2; var_dump($user->where($map)->select());
這時,SQL查詢的就只有id=2的數據了, $map['id']=2; 會將 $map['id']=array('eq',1); 覆蓋掉
3、復合查詢(_complex)
$user = M('User'); $map['id']=array('eq',1); $where['id']=2; $map['_complex']=$where; var_dump($user->where($map)->select());
這里新添加了一個數組$where,第2中方法中也說了 $map['id']=2; 會將 $map['id']=array('eq',1); 覆蓋掉
使用復合查詢后,對應的SQL查詢語句為:
這時默認的連接符是AND,如果想換成或,則添加一條語句 $map['_logic']='OR'; 即可
四、統計查詢
查詢有多少條目
$user = M('User'); var_dump($user->count());
這時SQL查詢語句為:
然后查詢數據庫中某一個名字下有多少條數據
首先我們的數據庫是這樣的
然后我們單獨查詢email下有多少條:
$user = M('User'); var_dump($user->count('email'));
查詢后顯示的結果為 string(1) "4" 這時我們手動添加一條數據
首先我們把email設置為可以為空,如下圖所示
然后添加一條數據,這時email欄不添加任何數據,添加后如下圖所示
這時,再查詢email的有多少條時,顯示的為 string(1) "4" ,我們給user為'李艷輝'的email添加為'yanhui@163.com',再查詢,則顯示為 string(1) "5"
也就是字段總條數,遇到NULL不統計。
下面是查詢數據庫的一些其他的信息
var_dump($user->max('id')); 查詢id的最大值
var_dump($user->min('id')); 查詢id的最小值
var_dump($user->avg('id')); 查詢id的平均值
var_dump($user->sum('id')); 查詢id的總值
五、動態查詢
借助 PHP5 語言的特性,ThinkPHP 實現了動態查詢。
1.getBy 動態查詢
$user = M('User'); var_dump($user->getByEmail('xiaoxin@163.com'));
直接查詢email為xiaoxin@163.com的數據
也可以使用 var_dump($user->getByUser('蠟筆小新')); 來獲得該條目的數據
也就是getBy后面接的必須是建立的數據表中的名字
2、getFieldBy 動態查詢
//通過user得到相對應id值 $user = M('User'); var_dump($user->getFieldByUser('路飛', 'id'));
這時,將id改為email,也可得到eamil的值,但是getFieldByUser中第一個參數必須是user對應的名字。
同樣的 getFieldByUser 也可以換成 getFieldByid 等,然后括號內第一個參數為id對應的值,后面一個參數是查詢的建立的數據表中的名字。
六、SQL查詢
ThinkPHP支持原生SQL查詢
1.query 讀取
//查詢結果集,如果采用分布式讀寫分離,則始終在讀服務器執行 $user = M('User'); var_dump($user->query('SELECT * FROM think_user'));
2、execute寫入
//更新和寫入,如果采用分布式讀寫分離,則始終在寫服務器執行 $user = M('User'); var_dump($user->execute('UPDATE think_user set user="蠟筆大新" WHERE id=1'));
文章列表