ThinkPHP查詢

查詢方式

Thinkphp提供了三種基本的查詢方式:字符串條件查詢、索引數(shù)組條件查詢和對(duì)象條件查詢、在大多數(shù)情況下,推薦使用索引數(shù)組和對(duì)象方式為查詢條件,因?yàn)闀?huì)更加安全
1、使用字符串作為條件查詢
//字符串作為條件查詢
$user = M('User');
var_dump($user->where(' id = 1 AND user = “蠟筆小新” ')->select());

PS:where查詢方法里面只要包含條件即可,多個(gè)條件加上AND等鏈接符即可,我們會(huì)在SQL連貫操作詳細(xì)學(xué)習(xí)。

2、使用索引數(shù)組作為查詢條件
//索引數(shù)組作為條件查詢
$user = M('User');
$condition[' user '] = '蠟筆小新';
$condition[' id'] = '蠟筆小新';
var_dump($user->where($condition)->select());

PS:索引數(shù)查詢的默認(rèn)邏輯關(guān)系是AND,如果想改變?yōu)镺R,可以使用_logic定義查詢邏輯

基于上面的代碼增加如下一行:
$condition['_logic'] = 'OR'  //將默認(rèn)AND改為OR

3、使用對(duì)象方式來(lái)查詢
//對(duì)象作為條件查詢
$user = M('User');
$condition = new \stdClass();
$condition->id = 1;
$condition->user = '蠟筆小新'
var_dump($user->where($condition)->select());

PS:stdClass類是PHP內(nèi)置的類,可以理解為一個(gè)空雷,在這里可以理解為把條件的字段作為成員保存在stdClass類里,而這里的‘\’是將命名空間設(shè)置為根目錄,否則會(huì)導(dǎo)致當(dāng)前目錄找不到次類。
PS:使用對(duì)象和數(shù)組查詢,效果是一樣的,可以互換,在大多數(shù)情況下,tinkPHP推薦使用數(shù)組形式更加高效

表達(dá)式查詢

對(duì)于那些藥實(shí)現(xiàn)模糊判斷的查詢,比如大于、等于、小于之類的SQL查詢,可以使用表達(dá)式查詢方式
查詢表達(dá)式格式:$map['字段名'] = array(' 表達(dá)式 ' , ‘ 查詢條件 ’);
表達(dá)式查詢表

表達(dá)式                            含義
EQ                               等于
NEQ                              不等于
GT                               大于
EGT                              大于等于
LT                               小于
ELT                              小于等于
[NOT]LIKE                        模糊查詢
[NOT]BETWEEN                    (不在)區(qū)間查詢
[NOT]IN                         (不在)IN查詢
EXP                              表達(dá)式查詢,支持SQL語(yǔ)法

PS:表達(dá)式不區(qū)分大小寫
//查詢表達(dá)式:$map['字段名'] = array('表達(dá)式',"查詢條件");
$user = M('User');

//等于
$map['id'] = array('eq',1);//id這個(gè)字段 的值等于(eq)1

//不等于
$map['id'] = array('neq',1);//id這個(gè)字段 的值不等于(neq)1,這時(shí)候會(huì)查出所有id不等于1的值

//模糊查詢
$map['user'] = array('like','%小%');//模糊查詢user里面帶小字的

//模糊查詢的數(shù)組方式
$map['user'] = array('like' , array('%小%', '%臘%'), 'AND');//又包含小的  又包含臘的  如果不寫AND 那就當(dāng)是或了。會(huì)查出既包含小的,又包含臘的

//區(qū)間查詢
$map['id'] = array('between' , '1,3') //查詢id在1到3區(qū)間的條目

//區(qū)間查詢數(shù)組形式
$map['id'] = array('between', array('1','3'));//查詢id在1到3之間的條目

//區(qū)間查詢 不在范圍之內(nèi)的
$map['id'] = array('not between', '1,3');//查詢id 不在1到3的范圍之內(nèi)的所有元素

//IN區(qū)間查找
$map['id'] = array('in' , '1,2,4');//查詢id等于1,2,4的條目

//not IN 查找
$map['id'] = array('not in' , '1,2,4');//查詢id 不等于1,2,4的條目。

//小于查詢
$map['id'] = array('exp' , '<1');//查詢id
var_dump($user->where($map)->select());

快捷查詢

//快捷查詢方式是一中多字段查詢的簡(jiǎn)化寫法,在多個(gè)字段之間用 ' | '隔開表示OR,用‘&’隔開表示AND
1、不同字段相同查詢條件
//使用相同的查詢條件
$user = M('User');
$map[' user|email '] = 'a';   // ' | '換成‘ & ’變成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:設(shè)置‘_multi’為true,是為了讓id對(duì)應(yīng)1,讓user對(duì)應(yīng)‘蠟筆小新’,否則就會(huì)出現(xiàn)id對(duì)應(yīng)了1還要對(duì)應(yīng)‘蠟筆小新’的情況,而且,這設(shè)置要在放在數(shù)組最后

//支持使用表達(dá)式結(jié)合快捷查詢
$user = M('User');
$map[' id&user '] = array(array(' gt ' ,0), '蠟筆小新' ,'_multi '=>true);
var_dump($user->where($map)->select());

區(qū)間查詢

ThinkPHP支持對(duì)某個(gè)字段的區(qū)間查詢
//區(qū)間查詢
$user = M('User');
$map[' id '] = array( array(' gt ' , 1 ) , array( ' lt ' , 4 ) );//意思是id大于1 和id小于4的。
var_dump($user->where($map)->select());

//第三個(gè)參數(shù)設(shè)置邏輯OR
$user = M(' User ');
$map[' id '] = array( array(' gt ' , 1) , array( ' lt ' , 4) , 'OR');
var_dump($user->where($map)->select);

組合查詢

組合查詢是基于索引數(shù)組查詢方式的一個(gè)拓展性查詢,添加了字符串查詢(_string),復(fù)合查詢(_complex),請(qǐng)求字符串查詢(_query),由于采用的是索引數(shù)組,重復(fù)的會(huì)被覆蓋。
//字符串查詢(_string)
$user = M(User);
$map[' id '] = array(' eq ' , 1);
$map[' _string '] = ' user= "蠟筆小新" AND mail = “xiaoxin@163.com” ';
var_dump($user->where($map)->select());

//請(qǐng)求字符串查詢(_query)
$user = M('User');
$map[' id '] = array('eq' ,1);
$map['_query'] = 'user = 蠟筆小新&maile = xiaoxin@163.com&_logic=OR';
var_dump($user->where($map)->select());

PS:這總方式是URL方式,不需要加引號(hào)

//復(fù)合查詢(_complex)
$user = M(User);
$where[' user '] = array(' like ' , ' %小% ');
$where['id'] = 1;
$where['_logic'] = 'OR'
$map['_complex'] = $where;
$map['id'] = 3;
$map['_logic'] = 'OR'
var_dump($user->where($map)-select());

PS:復(fù)合查詢可以構(gòu)建更加復(fù)雜的查詢,這里id=1或者id = 3可以構(gòu)建實(shí)現(xiàn)。

統(tǒng)計(jì)查詢

//Tinkphp提供了一些統(tǒng)計(jì)查詢的方法
//數(shù)據(jù)總條數(shù),遇到NULL不統(tǒng)計(jì)
$user = M('User');
var_dump($user->count(' mail ' ) );

//最大值
$user = M('User');
var_dump($user->max(' id ' ) );

//最小值
$user = M('User');
var_dump($user->min(' id ' ) );

//平均值
$user = M('User');
var_dump($user->avg(' id '));

//求總和
$user = M(' User ');
var_dump($user->sum(' id '));

動(dòng)態(tài)查詢

借助PHP5語(yǔ)言的特性,ThinkPhp實(shí)現(xiàn)了動(dòng)態(tài)查詢
1、getBy動(dòng)態(tài)查詢
//查找mail=xiaoxin@163.com的數(shù)據(jù)
$user = M('User');
var_dump($user->getByMail('xiaoxin@163.com'));
2、getFieldBy動(dòng)態(tài)查詢
//通過(guò)user得到相應(yīng)id值
$user = M('User');
var_dump($user->getFieldByUser('路飛',‘id’));

SQL查詢

ThikPHP支持原生SQL查詢
1、query讀取
//查詢結(jié)果集,如果采用分布式讀寫分離,即始終在讀服務(wù)器執(zhí)行。
$user = M('User');
var_dump($user->query('SELECT *FROM think_user'));

2、execute寫入
//更新和寫入,如果采用分布式讀寫分離,則始終在寫服務(wù)器執(zhí)行
$user = M('User');
var_dump($user->execute('UPDATE think_user set user=''蠟筆大新“ WHERE id=1' ));
PS:由于子查詢用了不少連貫操作,我們會(huì)在連貫才做講解。

//實(shí)例化Model類
//字符串作為條件查詢
$user = M('User');
//查出user表中的 id=1的 名稱為蠟筆小新的數(shù)據(jù)。
var_dump($user->where('id=1 AND user="蠟筆小新" ')->select())




-----------------分割線-----------------



-----------------分割線-----------------





--------------------------分割線----------------------

####快捷查詢
快捷查詢方式是一種多字段查詢的簡(jiǎn)化寫法,在多個(gè)字段之間用'|'隔開表示OR,用‘&’隔開表示AND

1、不同字段相同查詢條件
//使用字段相同查詢條件
$user = M('User');
$map['user|email'] = 'a';        //'|'換成‘&’變成AND

2、不同字段不同查詢條件
//使用不同查詢條件
$user = M('User');
$map['id&user'] = array(1,'蠟筆小新',‘_multi’=>true);//這句代碼的意思是id和user分別對(duì)應(yīng)著1  和 蠟筆小新  _multi=>true意思是一一對(duì)應(yīng)。如果不寫這個(gè)得話,會(huì)出現(xiàn)id對(duì)應(yīng)了1還要對(duì)應(yīng)‘蠟筆小新’的情況,而且,這設(shè)置要放在數(shù)組最后。

//支持使用表達(dá)式結(jié)合快捷查詢
$user = M('User');
$map['id&user'] = array(array('gt',0),'蠟筆小新',‘_multi’=>true);//gt的意思是大于  整體的意思是 id大于0的 user是蠟筆小新的 這一條。

----------------分割線----------
###組合查詢

$user = M('User');
$map['id'] = array('eq',1);
$map['_string'] = 'user="蠟筆小新" AND email=“xiaoxin@163.com” ';//
var_dump($user->where($map)->select());

六、統(tǒng)計(jì)查詢






最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,442評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,802評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,983評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,287評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,486評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,710評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評(píng)論 1 294
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,224評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,462評(píng)論 2 378

推薦閱讀更多精彩內(nèi)容