文章出處

一、快捷查詢

快捷查詢方式是一種多字段查詢的簡化寫法,在多個字段之間用'|'隔開表示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'));

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()