【三十三】thinkphp之SQL查詢語句(全)


一:字符串條件查詢

        //直接實例化Model
        $user=M('user1');
        var_dump($user->where ('id=1 OR age=55')->select());

最終生成的sql語句為:SELECT * FROM `user1` WHERE ( id=1 OR age=55 )

PS:where 查詢方法里面只要包含條件即可,多個條件加上 AND 等連接符即可

二:使用索引數組作為查詢條件

        $user=M('user1');
        $condition['age']='55';
        $condition['name']='zs';
        // 索引數組查詢的默認邏輯關系是 AND,如果想改變為 OR,可以使用_logic 定義查詢邏輯
        $condition['_logic'] = 'OR';
        var_dump($user->where($condition)->select());

最終生成的sql語句為:SELECT * FROM `user1` WHERE `id` = ‘1’ AND `name` = 'zs'

三:使用對象方式查詢

<?php
namespace Home\Controller;
use Think\Controller;
use Think\stdClass;
class EleController extends Controller
{
        $user=M('user1');
        $condition=new \stdClass;
        $condition->id = '1';
        var_dump($user->where($condition)->select());
}

最終生成的sql語句為:SELECT * FROM `user1` WHERE `id` = ‘1’

四:表達式查詢

查詢表達式格式:$map['字段名'] = array('表達式','查詢條件');

        $user=M('user1');
        $map['age'] = array('eq', 55); //where 為 age=55
        var_dump($user->where($map)->select());        

 五:快捷查詢

        //使用相同查詢條件
        $user = M('user1');
        $map['name|email'] = 'a'; //'|'換成'&'變成AND
        var_dump($user->where($map)->select());
        // 不同字段不同查詢條件
        //使用不同查詢條件
        $user = M('user1');
        $map['name&email'] =array('a','test@qq.com','_multi'=>true);
        var_dump($user->where($map)->select());    

第一條查詢的結果:SELECT * FROM `user1` WHERE ( `name` = 'a' OR `email` = 'a' ) 

第二條查詢的結果:SELECT * FROM `user1` WHERE ( (`name` = 'a') AND (`email` = 'test@qq.com') )

六:區間查詢

    // 區間查詢
        $user = M('user1');
        $map['id'] = array(array('gt', 1), array('lt', 4));
        var_dump($user->where($map)->select());
        //第三個參數設置邏輯OR
        $user = M('User1');
        $map['id'] = array(array('gt', 1), array('lt', 4), 'OR');
        var_dump($user->where($map)->select()
    }

七:組合查詢

組合查詢是基於索引數組查詢方式的一個擴展性查詢,添加了字符串查詢(_string)、復合查詢(_complex)、請求字符串查詢(_query),由於采用的是索引數組,重復的會被覆蓋。

        //字符串查詢(_string)
        $user = M('user1');
        $map['name'] = array('eq', 'zs');
        $map['_string'] ='age="30" AND email="zs@qq.com"';
        var_dump($user->where($map)->select());
        //請求字符串查詢(_query)
        $user = M('user1');
        $map['id'] = array('eq', "1");
        $map['_query'] ='name=zs&email=zs@qq.com&_logic=OR';
        var_dump($user->where($map)->select());
        //復合查詢(_complex)
        $user = M('user1');
        $where['name'] = array('like', 'z');
        $where['id'] = 1;
        $where['_logic'] = 'OR';
        $map['_complex'] = $where;
        $map['id'] = 3;
        $map['_logic'] = 'OR';
        var_dump($user->where($map)->select());

第一條查詢語句:SELECT * FROM `user1` WHERE `name` = 'zs' AND ( age="30" AND email="zs@qq.com" )

第二條查詢語句:SELECT * FROM `user1` WHERE `name` = 'zs' AND ( age="30" AND email="zs@qq.com" ) AND ( `name` = 'zs' OR `email` = 'zs@qq.com' )

第三條查詢語句:SELECT * FROM `user1` WHERE `name` = 'zs' OR ( age="30" AND email="zs@qq.com" ) OR ( `name` = 'zs' OR `email` = 'zs@qq.com' ) OR ( `name` LIKE 'z' OR `id` = 1 ) 

 八:統計查詢

        //數據總條數
        //SHOW COLUMNS FROM `user1`
        $user = M('user1');
        var_dump($user->count());
        //字段總條數,遇到NULL不統計
        //SELECT COUNT(*) AS tp_count FROM `user1` LIMIT 1
        $user = M('user1');
        var_dump($user->count('email'));
        //最大值
        //SELECT MAX(id) AS tp_max FROM `user1` LIMIT 1 
        $user = M('user1');
        var_dump($user->max('id'));
        //最小值
        //SELECT MIN(id) AS tp_min FROM `user1` LIMIT 1
        $user = M('user1');
        var_dump($user->min('id'));
        //平均值
        //SELECT AVG(id) AS tp_avg FROM `user1` LIMIT 1 
        $user = M('user1');
        var_dump($user->avg('id'));
        //求總和
        //SELECT SUM(id) AS tp_sum FROM `user1` LIMIT 1
        $user = M('user1');
        var_dump($user->sum('id'));

九:動態查詢

        // 1.getBy 動態查詢
        //查找email=xiaoin@163.com的數據
        //SELECT * FROM `user1` LIMIT 1 
        $user = M('user1');
        var_dump($user->getByemail('zs@qq.com'));
        // 2.getFieldBy 動態查詢
        //通過user得到相對應id值
        //SELECT `id` FROM `user1` LIMIT 1
        $user = M('user1');
        var_dump($user->getFieldByUser('ls', 'id'));

十:SQL查詢

     // 1.query 讀取
        //查詢結果集,如果采用分布式讀寫分離,則始終在讀服務器執行
        //SELECT * FROM user1
        $user = M('user1');
        var_dump($user->query('SELECT * FROM user1'));
        // 2.execute寫入
        //更新和寫入,如果采用分布式讀寫分離,則始終在寫服務器執行
        //UPDATE user1 set name="xuexi" WHERE id="1";
        $user = M('user1');
        var_dump($user->execute('UPDATE user1 set name="xuexi" WHERE
         id="1";'));

 十一:連貫查詢

 通過連貫操作可以有效的提供數據存取的代碼清晰度和開發效率,並且支持所有的 CURD 操作

        //連貫操作
        //PS:這里的 where、order 和 limit 方法都是連貫操作方法,所以它們都能返回$user本身,可以互換位置。而 select 方法不是連貫方法,需要放在最后,用以顯示數據集。
        //SELECT * FROM `user1` WHERE ( id in (1,2,3,4) ) LIMIT 2 
        $user=M('user1');
        var_dump($user->where('id in (1,2,3,4)')->limit(2)->select());
        //數組操作
        //SELECT * FROM `user1` WHERE id in (1,2,3,4) LIMIT 2 
        $user = M('user1');
        var_dump($user->select(array('where'=>'id in (1,2,3,4)', 'limit'=>'2',
        )));
        // CURD處理
        // SELECT * FROM `user1` WHERE ( id=1 ) LIMIT 1
        // DELETE FROM `user1` WHERE ( id=2 )
        $user = M('user1');
        var_dump($user->where('id=1')->find());
        var_dump($user->where('id=2')->delete());

 

 1.where(支持字符串條件、數組條件(推薦用法)和多次調用。)

        //字符串方式
        //SELECT * FROM `user1` WHERE ( id=6 )
        var_dump($user->where('id=6')->select());

        //索引數組方式
        // SELECT * FROM `user1` WHERE `id` = 6
        $map['id']=6;
        var_dump($user->where($map)->select());

        //多次調用方式
        SELECT * FROM `user1` WHERE `id` = 6 AND ( name="test" ) 
        $map['id']=array('eq',6);
        var_dump($user->where($map)->where('name="test"')->select());

2.order 用於對結果集排序

    // 倒序
        // SELECT * FROM `user1` ORDER BY id desc
        var_dump($user->order('id desc')->select());

        // 第二排序
        // SELECT * FROM `user1` ORDER BY id desc,age desc
        var_dump($user->order('id desc,age desc')->select());

        //數組形式,防止字段和mysql關鍵字沖突
        // SELECT * FROM `user1` ORDER BY `id` DESC,`email` DESC
        $map['id']=1;
        var_dump($user->order(array('id'=>'DESC','email'=>'DESC'))->select());

3.feild(feild 方法可以返回或操作字段,可以用於查詢和寫入操作。)

    // 只顯示id和name兩個字段
      // SELECT `id`,`name` FROM `user1` 
        var_dump($user->field('id,name')->select());

      //使用SQL函數和別名
      // SELECT SUM(id) as count,`name` FROM `user1`
      var_dump($user->field('SUM(id) as count,name')->select());

      // 使用數組參數結合SQL函數
      // SELECT `id`,LEFT(name,1) AS `left_user` FROM `user1`
      var_dump($user->field(array('id','LEFT(name,1)'=>'left_user'))->select());

      //獲取所有字段
      // SELECT * FROM `user1` 
      var_dump($user->field()->select());

      //用於寫入
      $user->field('name,email')->create();

 4.limit(主要用於指定查詢和操作的數量)

      //限制結果集數量
      // SELECT * FROM `user1` LIMIT 2
      var_dump($user->limit(2)->select());

      //分頁查詢
      // SELECT * FROM `user1` LIMIT 1,2 
      var_dump($user->limit(1,2)->select());

5.page(page 方法完全用於分頁查詢)

      //page分頁
      // SELECT * FROM `user1` LIMIT 3,3
      var_dump($user->page(2,3)->select());

6.table(用於數據表操作,主要是切換數據表或多表操作)

      //切換數據表
      // SELECT * FROM `test_user`
      var_dump($user->table('test_user')->select());

7.alias (用於設置數據表別名)

      // 設置別名
      // SELECT * FROM user1 a 
      var_dump($user->alias('a')->select());

8.group(用於對結合函數統計的結果集分組)

    // 分組統計
      // SELECT `name`,max(id) FROM `user1` GROUP BY id
      var_dump($user->field('name,max(id)')->group('id')->select());

9.having(用於配合 group 方法完成從分組的結果中再篩選數據)

      //分組統計結合having
      // SELECT `user`,max(id) FROM `user1` GROUP BY id HAVING id>2 
      var_dump($user->field('user,max(id)')->group('id')->having('id>2')->select());

10.comment (用於對 SQL 語句進行注釋)

      //SQL注釋
      // SELECT * FROM `user1` /* test */
      var_dump($user->comment('test')->select());

命名空間

命名范圍其實就是將 SQL 語句封裝在模型定義類里,而不在控制器里。

在Model下新建一個User1Model.class.php文件

<?php
namespace Home\Model;
use Think\Model;
class User1Model extends Model
{
    //定義屬性
protected $_scope = array( //屬性名必須是_scope
        'sql1'=>array(
        'where'=>array('id'=>1),
        ),
        'sql2'=>array(
        'order'=>'date DESC',
        'limit'=>2,
        ),
        'default'=>array(
        'where'=>array('id'=>2),
        ),
        );
}

命名范圍支持的屬性有:where、field、order、table、limit、page、having、group、lock、distinct、cache

在Controller目錄下新建一個User1Controller.class.php文件

<?php
namespace Home\Controller;
use Think\Controller;
use Home\Model\User1Model;
class User1Controller extends Controller {
    public function model(){
        // ps:一定要填入表名,user1
        // 他會先去model文件夾找有沒有user1model
        // 如果有就應用
        // 如果沒有,會直接引用model基類
        $user=D('user1');
        // sql語句:SELECT * FROM `user1` WHERE `id` = 1
        var_dump($user->scope('sql1')->select());
    }
}


免責聲明!

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



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