一、概述
1、ThinkPHP支持直接使用字符串作為查詢條件,但是大多數情況下推薦使用索引數組或對象來作為查詢條件,因為更加安全!
2、查詢條件可以用于CURD等任何操作,作為where方法的參數傳入即可,ThinkPHP內置了非常靈活的查詢方法,可以快速的進行數據查詢操作,下面來一一講解查詢語言的內涵。
3、查詢語言分為普通查詢、區間查詢、組合查詢、復合查詢、統計查詢、定位查詢、SQL查詢、動態查詢
二、普通查詢
查詢條件可以為String、Array或Object類型
1、字符串
注意,如果連貫操作的方法采用String類型的參數,那么參數就得按照原生sql語句的寫法。這里的'username='Tiger''就驗證了這句話,如果Tiger沒有用''包起來,則會出錯!
2、數組(索引數組)
3、對象
4、不知道大伙有沒有發現,以上關于參數Array和Object類型的兩個例子只能做到了一個相等的查詢條件,那么怎么通過Array或Object類型參數來實現更加復雜的查詢條件呢(顯然String類型參數是可以做到的,故不贅述)?即使用查詢表達式。以Array類型為例,Object類型同理!$condition['字段名']=array('表達式','查詢條件');即內層數組的第一個元素值表示表達式、第二個元素值表示查詢條件。表達式不區分大小寫
·eq(相等)
·neq(不等)
·gt(大于)
·egt(大于等于)
·lt(小于)
·elt(小于等于)
·like(同原生sql語句中的LIKE)
可以進行模糊匹配
在應用配置文件中可以配置DB_LIKE_FIELDS,那么被配置項匹配的字段將會自動進行模糊匹配。比如說$condition['username']='Tiger';相當于username like '%Tiger%'
·between/notbetween
查詢條件支持String或Array類型,即內層數組的第二個元素值可以是字符串或數組
·in/notin
查詢條件同樣支持String和Array類型
·exp
表達式,支持更復雜的查詢情況
查詢條件是一個按照原生sql語句格式書寫的完整的查詢表達式(可以使用原生sql語句支持的語法,包括使用sql函數、字段等等)(額,似乎回到了where(字符串查詢條件)),即內層數組的第二個元素值是一個完整的查詢表達式
查詢條件只支持String類型
其不僅可以用于查詢表達式,還可以用于更新操作
三、區間查詢
ThinkPHP支持對某個字段進行區間查詢
內層數組的最后一個元素值默認是'AND',也可以是'OR','XOR'
內層數組的最后一個元素之前并不是只可能有兩個元素,而是可以有多個元素的,且元素值為數組
四、組合查詢
1、ThinkPHP在進行多字段查詢時,默認的邏輯關系是邏輯與(AND),可以通過外層數組元素鍵'_logic'指定邏輯關系
2、通過外層數組元素鍵'_string'還可以實現數組條件與字符串條件混合使用
五、復合查詢
通過外層數組元素鍵'_complex'可以指定查詢子條件
六、統計查詢
在實際開發中,經常會用到統計數據,比如說,當前所有(或滿足某些條件)的用戶數、所有用戶的最大積分、用戶的平均成績等等。ThinkPHP會這些可能的統計操作都設計了相應的內置方法
而且統計查詢方法都支持連貫操作。那么顯然可以用where()方法定義查詢范圍咯
1、count()方法
獲取當前數據表的記錄數
2、max()方法
獲取數據表中某個字段最大值
3、min()方法
與max()同理
4、avg()方法
與max()同理
5、sum()方法
與max()同理
七、定位查詢
ThinkPHP支持定位查詢,但是必須要求當前模型繼承高級模型類,可以使用getN()方法直接訪問結果中某個位置的記錄
getN(正整數)、getN(負整數)、first()、last()
八、SQL查詢
ThinkPHP仍然保留了原生的SQL查詢(R)和執行(CUD)操作支持,為了滿足復雜查詢的需要和一些特殊的數據操作,SQL查詢的返回值是直接返回Db類的查詢結果,沒有做任何的處理。而且可以支持查詢緩存
1、query()方法
有受影響行數,且有結果集,用該方法。參數為完整的原生sql語句
2、execute()方法
有受影響函數,沒有結果集,用該方法。參數為完整的原生sql語句
九、動態查詢
1、直接根據數據表的字段進行查詢,但是只支持單字段
2、獲取符合條件的前N條記錄
直接使用topN()方法,同樣的必須繼承高級模型
對于ThinkPHP的動態查詢,咋一看可能不太好理解,可能會問,$User這個對象哪來的getByUsername()、top3()或top()方法呢?Model類和AdvModel類都沒有這些方法,而自定義的UserModel類也沒有這些方法?!
PHP同JavaScript一樣,也支持動態給對象添加公開的屬性或方法!
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答