zoukankan      html  css  js  c++  java
  • Yii2 数据操作之Query Builder

    Query Builder

    1. 1 $rows = (new yiidbQuery())  
      2     ->select(['dyn_id', 'dyn_name'])  
      3     ->from('zs_dynasty')  
      4     ->where(['between','dyn_id', 1,30])  
      5     ->limit(10)  
      6     ->all();  
      7 print_r($rows);  
      1 use yiidbQuery;  
      2 $query = (new Query())  
      3     ->from('user')  
      4     ->orderBy('id');  
    SELECT
    1 $query->select('*')->  
    2     select('dyn_id as id, dynasty.dyn_name')->  
    3     $query->select(['dyn_id as id', "CONCAT(dyn_name,'a')"])->  
    4     $query->select('user_id')->distinct()->  
    FORM
     1 $query->from('user');  
     2 $query->from(['public.user u', 'public.post p']);  
     3 $query->from('public.user u, public.post p');  
     4 $query->from(['u' => 'public.user', 'p' => 'public.post']);  
     5 
     6 
     7 $subQuery = (new Query())->select('id')->from('user')-
     8     >where('status=1');  
     9 // SELECT * FROM (SELECT `id` FROM `user` WHERE status=1) u   
    10 $query->from(['u' => $subQuery]);  
     
    WHERE
     1 where('status=1')->  
     2 where('status=:status', [':status' => $status])->  
     3 where([  
     4     'status' => 10,  
     5     'type' => null,  
     6     'id' => [4, 8, 15],  
     7 ])->  
     8 -------  
     9 $userQuery = (new Query())->select('id')->from('user');  
    10 // ...WHERE `id` IN (SELECT `id` FROM `user`)  
    11 $query->...->where(['id' => $userQuery])->...  
    12 --------  
    13 ['and', 'id=1', 'id=2'] //id=1 AND id=2  
    14 ['and', 'type=1', ['or', 'id=1', 'id=2']] //type=1 AND (id=1 OR id=2)  
    15 ['between', 'id', 1, 10] //id BETWEEN 1 AND 10  
    16 ['not between', 'id', 1, 10] //not id BETWEEN 1 AND 10  
    17 ['in', 'id', [1, 2, 3]] //id IN (1, 2, 3)  
    18 ['not in', 'id', [1, 2, 3]] //not id IN (1, 2, 3)  
    19 ['like', 'name', 'tester'] //name LIKE '%tester%'  
    20 ['like', 'name', ['test', 'sample']] //name LIKE '%test%' AND name LIKE '%sample%'  
    21 ['not like', 'name', ['or', 'test', 'sample']] //not name LIKE '%test%' OR not name LIKE '%sample%'  
    22 ['exists','id', $userQuery] //EXISTS (sub-query) | not exists  
    23 ['>', 'age', 10] //age>10  

    ADD WHERE
    1 $status = 10;  
    2 $search = 'yii';  
    3 $query->where(['status' => $status]);  
    4 if (!empty($search)) {  
    5     $query->andWhere(['like', 'title', $search]);  
    6 }  
    7 //WHERE (`status` = 10) AND (`title` LIKE '%yii%')  
    8 //andWhere() or orWhere()  

    FILTER WHERE
    1. $query->filterWhere([  
          'username' => $username,  
          'email' => $email,  
      ]);  
      //如果email为空,则 WHERE username=:username  
     
    ORDER BY
    1 $query->orderBy([  
    2     'id' => SORT_ASC,  
    3     'name' => SORT_DESC,  
    4 ]);  
    5 //orderBy , addOrderBy  

    GROUP BY
    1 $query->groupBy('id, status');  
    2 $query->addGroupBy(['created_at', 'updated_at']);  

    HAVING 
    1 $query->having(['status' => $status]);  
    2 //having,andHaving,orHaving  
    LIMIT OR OFFSET
    1 $query->limit(10);  
    2 $query->offset(10);  
    JOIN
    • innerJoin()
    • leftJoin()
    • rightJoin()
    1 $query->select(['user.name AS author', 'post.title as title'])  
    2     ->from('user')  
    3     ->leftJoin('post', 'post.user_id = user.id');  
    4 $query->join('FULL OUTER JOIN', 'post', 'post.user_id = user.id');  
    5 $query->leftJoin(['u' => $subQuery], 'u.id=author_id');  
    UNION
     
    1 $query = new Query();  
    2 $query->select("id, category_id as type, name")->from('post')->limit(10);  
    3 $anotherQuery = new Query();  
    4 $anotherQuery->select('id, type, name')->from('user')->limit(10);  
    5 $query->union($anotherQuery);  

    QUERY METHODS
    • all() //所有行列
    • one() //第一行
    • column() //第一列
    • scalar() //第一行第一列
    • exists() //是否有结果存在
    • count() //记录数量
    • sum($q), average($q), max($q), min($q) //$q 为字段或表达式
     1 $count = (new yiidbQuery())  
     2     ->from('user')  
     3     ->where(['last_name' => 'Smith'])  
     4     ->count();  
     5 //SELECT COUNT(*) FROM `user` WHERE `last_name`=:last_name  
     6   
     7   
     8 $command = (new yiidbQuery())  
     9     ->select(['id', 'email'])  
    10     ->from('user')  
    11     ->where(['last_name' => 'Smith'])  
    12     ->limit(10)  
    13     ->createCommand();  
    14       
    15 // show the SQL statement  
    16 echo $command->sql;  
    17 // show the parameters to be bound  
    18 print_r($command->params);  
    19   
    20   
    21 // returns all rows of the query result  
    22 $rows = $command->queryAll();  
     
    QUERY RESULTS
    1 use yiidbQuery;  
    2 $query = (new Query())  
    3     ->from('user')  
    4     ->indexBy('username');  
    5 foreach ($query->batch() as $users) {  
    6     // $users is indexed by the "username" column  
    7 }  
    8 foreach ($query->each() as $username => $user) {  
    9 }  
    INDEXING

     
     1 use yiidbQuery;  
     2 $query = (new Query())  
     3     ->from('user')  
     4     ->orderBy('id');  
     5 foreach ($query->batch() as $users) {  
     6     // batch( $batchSize = 100, $db = null )  
     7     // 一个批次取100行  
     8 }  
     9 foreach ($query->each() as $user) {  
    10     // 一行一行取  
    11 }
  • 相关阅读:
    分库分表(1) --- 理论
    Elasticsearch(10) --- 内置分词器、中文分词器
    Elasticsearch(9) --- 聚合查询(Bucket聚合)
    Elasticsearch(8) --- 聚合查询(Metric聚合)
    Elasticsearch(7) --- 复合查询
    Elasticsearch(6) --- Query查询和Filter查询
    Elasticsearch(5) --- 基本命令(集群相关命令、索引CRUD命令、文档CRUD命令)
    第二周 Word版面设计
    第六周 Word目录和索引
    第五周 Word注释与交叉引用
  • 原文地址:https://www.cnblogs.com/yunyunde/p/7156331.html
Copyright © 2011-2022 走看看