掌握Thinkphp3.2.0----SQL查詢


首先,先談一下對查詢的理解:查詢的對象是數據庫中的數據表,一個或多個;查詢的限制就是各種條件或要求;查詢的結果=表對象+限制(條件)。

對數據表的操作(CRUD)查詢是最復雜也是最關鍵的一步!'SELECT * FROM  WHERE [condition]',WHERE是對基本的限制條件。

對象即數據庫中數據表是不用變化的,需要變化的是查詢的條件。

條件的形式

  1.基本形式----字符串形式。萬能形式,查詢不安全(不會自動添加安全符號``),就相當於在前邊的sql語句上連綴后邊的條件。

1 $user = M('User');
2 //字符串的查詢條件
3 $where_str = '`this is a string`';
4 //顯示測試結果
5 $result = $user -> where($where_str) -> select();
6 var_dump($result);

 結果:

  可見就是在WHERE之后的條件中寫入該字符串,也就該形式可以實現所有的WHERE關鍵字的SQL查詢。

例如:

  

1         $user = M('User');
2         //字符串的查詢條件
3         $where_str = 'id=1';
4         //顯示測試結果
5         $result = $user -> where($where_str) -> select();
6         var_dump($result);    

 

結果:

  

  2.數組形式條件。還是針對WHERE查詢,就是把WHERE查詢的條件分開,例如id=1條件,分成 id 和 1兩部分,寫入數組id做鍵,1做值,另外寫入控制符。

數組是比較推薦的形式,這里是數組形式,值是字符串或整型或浮點

例子:

1  $user = M('User');
2 //數組形式的條件
3 $condition['id'] = array(1);
4 //顯示測試結果
5 $result = $user -> where($condition) -> select();
6 var_dump($result);    

 

結果:

示例

 

 3.對象形式的條件。和數組很像,只是更換了數據的載體為對象(stdClass空對象,PHP程序提供)

  4.表達式查詢。實際就是來更改條件中運算符的。根據運算符的不同可能有不同的結構,這種形式相對靈活,可以寫出很復雜的SQL查詢語句,不行不是還有一個自定義嗎。

基本結構:      查詢表達式格式:$map['字段名'] = array('表達式','查詢條件');---數組形式,值是數組.查詢條件可以是數組,只是對有的表達式沒有作用,比如EQ

LIKE/NOTLIKE

 

BETWEEN/NOT BETWEEN

1 $user = M('User');
2 //表達式形式
3 // $map['id'] = array('BETWEEN','1,10');這兩種形式一樣
4 $map['id'] = array('BETWEEN',array(1,10));
5 
6 $result = $user -> where($map) -> select();
7 var_dump($result);

 

IN/NOTIN-----IN是IN,BETWEEN是BETWEEN!

$user = M('User');
//表達式形式
$map['id'] = array('BETWEEN','1,10');
// $map['id'] = array('IN',array(1,6));這兩種形式一樣

$result = $user -> where($map) -> select();
var_dump($result);

 

 自定義形式:有點像連綴

還有幾種其他的形式,多寫,找到合適簡便就可以了

快捷方式  | &  

  

等價效果:

 1 $user = M('User');
 2         //快捷方式
 3         $map['id&user'] = 1;
 4         // 等價於
 5         // $map['id'] = 1;
 6         // $map['user'] = 1;
 7         // $map['_logic'] = 'AND';
 8         // 或等價於
 9         // $condition = 'id=1 AND user=1';
10         $result = $user -> where($map) -> select();
11         var_dump($result);

 

和表達式結合:

1 $user = M('User');
2         //快捷方式
3         $map['id&user'] = array(array('NEQ',1),array('EQ',1),'_multi'=>true);
4         $result = $user -> where($map) -> select();
5         var_dump($result);

 

結果:

SELECT * FROM `think_user` WHERE ( (`id` <> 1) AND (`user` = 1) ) [ RunTime:0.001000s ]感覺這是最好的

 還有,不一定是連個字段,可以是3個或多個字段

 再:

$map['_string'] = '';連綴字符串,可以連接到其他條件上

$map['query'] = '';URL模式,比較方便

$map['_complex'] = '';被覆蓋的時候使用

 1 $user = M('User');
 2         //組合查詢
 3         /*     $map['id'] = 1;
 4             $map['_string'] = 'user=1 AND email like 3';繼續連接字符串形式的條件
 5         */
 6         /*     $map['id'] = 1;
 7             $map['_query'] = 'user=1&email=2';//貌似運算符只能是=
 8         */
 9         /*     $where['id'] = 1;
10             $map['id'] = 1;
11             $map['_complex'] = $where;
12             $map['_logic'] = 'OR';
13         */        
14         $result = $user -> where($map) -> select();
15         var_dump($result);

 

統計查詢:$user->count();

動態查詢: getById()  getFieldByUser();

SQL原生

query();讀

excute();寫

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM