Yii2 数据操作之Query Builder

Query Builder

  1. 1 $rows = (new \yii\db\Query())
    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 yii\db\Query;
    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 \yii\db\Query())
 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 \yii\db\Query())
 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 yii\db\Query;
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 yii\db\Query;
 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 }
时间: 2024-11-09 02:41:45

Yii2 数据操作之Query Builder的相关文章

Active Query Builder免费下载及简单介绍

原文来自龙博方案网http://www.fanganwang.com/product/1322转载请注明出处 Active Query Builder是一款数据库查询构建控件集,用于Borland Delphi和 C++Builder中,通过它,您可以为您的用户提供一个直接而直观的界面来创建复杂的包含公用体和子查询的SQl查询.它完全支持多种数据库,包括Oracle, Microsoft SQL Server, MySQL, PostgreSQL, InterBase, Informix 和其他

如何使用 Studio 3T Query Builder 进行数据查询

最近在使用 Studio 3T 对 MongoDB 进行可视化的数据操作. 在 Studio 3T 中,我们可以借助 Query Builder 的 Drag & Drop 来构建查询条件. 具体的 Query Builder 使用方式可以阅读 Studio 3T 官方的这篇文章. 注意:在指定某个字段的值时,Ops 第一栏不要写: 原文地址:https://www.cnblogs.com/huangzejun/p/8675656.html

MySQL表的创建和表中数据操作

这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑安装了mysql(my.ini下的字符集设置是utf8) 2,确保电脑同时安装navicat(任意版本) 3,保证mysql服务器已经启动 注:若对navicat操作不熟,请参照<<navicat从下载到使用>>这篇文章. ☆ 打开控制台 在navicat的tools(工具)菜单栏选择

018_异地数据操作

--[分布式查询]异地数据库的异种数据操作 /* 一.分布式查询定义: MSSQlServer所谓的分布式查询(Distributed Query)是能够访问存放在同一部计算机或不同计算机上的SQL Server或不同种类的数据源, 需要根据数据源的类别来使用相对应的接口.从而实现在服务器跨域或跨服务器访问. 二.执行机制: client(客户端)向服务器请求数据,此时先检查 memcache server(缓冲服务器)(本地)是否有此数据,没有的话就会根据相关数据源的接口调用异地数据,然后更新

SQL不同服务器数据库之间的数据操作整理(完整版)

---------------------------------------------------------------------------------- -- Author : htl258(Tony) -- Date : 2010-06-25 22:23:18 -- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) -- Jul 9 2008 14:43:34 -- Copyright (c) 1

数据库之Query Builder

Yii的查询构造器提供了一个用面向对象的方法来构造SQL语句.他让开发人员可以用类的方法,属性来作为SQL语句的一部分.然后把不同部分组装到一个正确的SQL语句中,调用DAO的方法来执行.下面的例子演示如何用QB来构造SQL语句 $user = Yii::app()->db->createCommand() ->select('id, username, profile') ->from('tbl_user u') ->join('tbl_profile p', 'u.id=

Bmob移动后端云服务平台--Android从零开始--(三)Bmob数据操作((批量)增删改)

Bmob移动后端云服务平台--Android从零开始--(三)Bmob数据操作((批量)增删改) 上篇文章简单的利用Bmob实现了用户注册与登录效果(http://blog.csdn.net/a123demi/article/details/42059621). 在项目中,对数据的操作脱离不了增删改查.Bmob其实也一样,他对数据操作的增删改查做了很好的封装,以及其批量的处理.本文将重点讲解利用Bmob实现Android端与Bmob服务端的数据操作,实现增加.修改.删除以及他们的批量处理. 源码

PHP MSSQL数据操作PDO API

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8

Hibernate的数据操作(4.*以上版本)

Hibernate的基本数据操作 适用于4.* ..sessionFactory的创建区别 public class NewsTest { private Session session = null; private SessionFactory sf = null; private Transaction ts = null; @Before public void init() { Configuration config = new Configuration(); config.con