文档章节

Yii2 数据查询操作Query Builder集合

风清扬-深圳
 风清扬-深圳
发布于 2015/07/18 14:38
字数 830
阅读 200
收藏 2

YII2下对数据库进行查询操作的语句整理集合。

SELECT

$query->select('dyn_id as id, dynasty.dyn_name')->
$query->select(['dyn_id as id', "CONCAT(dyn_name,'a')"])->
$query->select('user_id')->distinct()->

FORM

$query->from('user');
$query->from(['public.user u', 'public.post p']);
$query->from('public.user u, public.post p');
$query->from(['u' => 'public.user', 'p' => 'public.post']);
----------
$subQuery = (new Query())->select('id')->from('user')->where('status=1');
// SELECT * FROM (SELECT `id` FROM `user` WHERE status=1) u 
$query->from(['u' => $subQuery]);

WHERE 

where('status=1')->
where('status=:status', [':status' => $status])->
where([
    'status' => 10,
    'type' => null,
    'id' => [4, 8, 15],
])->
-------
$userQuery = (new Query())->select('id')->from('user');
// ...WHERE `id` IN (SELECT `id` FROM `user`)
$query->...->where(['id' => $userQuery])->...
--------
['and', 'id=1', 'id=2'] //id=1 AND id=2
['and', 'type=1', ['or', 'id=1', 'id=2']] //type=1 AND (id=1 OR id=2)
['between', 'id', 1, 10] //id BETWEEN 1 AND 10
['not between', 'id', 1, 10] //not id BETWEEN 1 AND 10
['in', 'id', [1, 2, 3]] //id IN (1, 2, 3)
['not in', 'id', [1, 2, 3]] //not id IN (1, 2, 3)
['like', 'name', 'tester'] //name LIKE '%tester%'
['like', 'name', ['test', 'sample']] //name LIKE '%test%' AND name LIKE '%sample%'
['not like', 'name', ['or', 'test', 'sample']] //not name LIKE '%test%' OR not name LIKE '%sample%'
['exists','id', $userQuery] //EXISTS (sub-query) | not exists
['>', 'age', 10] //age>10

andWhere

$status = 10;
$search = 'yii';
$query->where(['status' => $status]);
if (!empty($search)) {
    $query->andWhere(['like', 'title', $search]);
}
//WHERE (`status` = 10) AND (`title` LIKE '%yii%')
//andWhere() or orWhere()

FILTER WHERE

$query->filterWhere([
    'username' => $username,
    'email' => $email,
]);
//如果email为空,则 WHERE username=:username

ORDER BY

$query->orderBy([
    'id' => SORT_ASC,
    'name' => SORT_DESC,
]);
//orderBy , addOrderBy

GROUP BY

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

HAVING

$query->having(['status' => $status]);
//having,andHaving,orHaving

 

OFFSET & LIMIT

$query->limit(10);
$query->offset(10);

 

LEFT JOIN & RIGHT JOIN & INNER JOIN

$query->select(['user.name AS author', 'post.title as title'])
    ->from('user')
    ->leftJoin('post', 'post.user_id = user.id');
$query->join('FULL OUTER JOIN', 'post', 'post.user_id = user.id');
$query->leftJoin(['u' => $subQuery], 'u.id=author_id');

UNION

$query = new Query();
$query->select("id, category_id as type, name")->from('post')->limit(10);
$anotherQuery = new Query();
$anotherQuery->select('id, type, name')->from('user')->limit(10);
$query->union($anotherQuery);

 

QUERY METHODS

 

all() //所有行列

one() //第一行

column() //第一列

scalar() //第一行第一列

exists() //是否有结果存在

count() //记录数量

sum($q), average($q), max($q), min($q) //$q 为字段或表达式

$count = (new \yii\db\Query())
    ->from('user')
    ->where(['last_name' => 'Smith'])
    ->count();
//SELECT COUNT(*) FROM `user` WHERE `last_name`=:last_name
$command = (new \yii\db\Query())
    ->select(['id', 'email'])
    ->from('user')
    ->where(['last_name' => 'Smith'])
    ->limit(10)
    ->createCommand();
    
// show the SQL statement
echo $command->sql;
// show the parameters to be bound
print_r($command->params);
// returns all rows of the query result
$rows = $command->queryAll();

 

QUERY RESULTS

use yii\db\Query;
$query = (new Query())
    ->from('user')
    ->indexBy('username');
foreach ($query->batch() as $users) {
    // $users is indexed by the "username" column
}
foreach ($query->each() as $username => $user) {
}

INDEXING

use yii\db\Query;
$query = (new Query())
    ->from('user')
    ->orderBy('id');
foreach ($query->batch() as $users) {
    // batch( $batchSize = 100, $db = null )
    // 一个批次取100行
}
foreach ($query->each() as $user) {
    // 一行一行取
}

 

完整查询如:

$result = self::find ( ['status' => 3] )->andWhere(['like', 'company', $keyword])->select ('username,company,mobile' )->orderBy ( 'groupid desc,logintimes DESC' )->limit ( 12 )->asArray ()->all ();
use yii\db\Query;
$query = new Query ();
$result = $query->select ( '' )->from ( self::$table )->where ( $condition )->orderBy ( 'edittime DESC' )->groupBy('mobile')->offset ( $offset )->limit ( $limit )->All ( B2b::getDb () );

 

我们的数据库常常都是很庞大的,一次查询的结果集也很大,这样很浪费内存,为了降低内存的使用率,我们可以使用yii2的batch和each方法。

$query = new \yii\db\Query();
$query->from('user');
foreach($query->all() as $user){
    echo $user['username'];
    echo "<br/>";
}
$query = new \yii\db\Query();
$query->from('user');
foreach($query->batch() as $users){
        foreach($users as $user){
        echo $user['username'];
        echo "<br/>";
    }
}

debug查看结果,当我们遇到需要一次读取出所有的或是大批量数据的时候,可以考虑使用batch和each,这一点点代码的优化帮你省掉了一半的内存。

$query = new \yii\db\Query();
$query->from('user');
foreach($query->each() as $user){
    echo $user['username'];
    echo "<br/>";
}

本文转载自:http://blog.csdn.net/hzqghost/article/details/44117081

共有 人打赏支持
风清扬-深圳
粉丝 11
博文 73
码字总数 19480
作品 0
深圳
高级程序员
私信 提问
数据库查询生成器控件集Active Query Builder下载及介绍大全

Active Query Builder 相关文章 Yii Framework数据库Query Builder示例 Active Query Builder 相关新闻 数据库查询生成器控件集Active Query Builder增加引用表查询功能 Active Query Build...

kongjianxuanxing
2014/05/04
0
0
yii2使用原生语句执行数据库操作yii\db\Query和yii\db\Command

某些情况下我们并不需要启用比较重的AR去操作数据库,这里Yii2也为我们提供了 yiidbQuery 查询构造器 只能创建 查询 命令 yiidbCommand sql命令工具 可以创建 curd 操作 两个工具类来满足此类...

big_cat
2016/05/13
556
0
yii2 ActiveRecord多表关联以及多表关联搜索的实现

作者:白狼 出处:http://www.manks.top/yii2_many_ar_relation_search.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法...

白狼栈
2016/07/05
25
0
YII访问数据库(Yii Dao)

CDbConnection: 一个抽象数据库连接 CDbCommand: SQL statement CDbDataReader: 匹配结果集的一行记录 CDbTransaction:数据库事务 访问数据库前需要建立数据库连接;使用DAO建立一个抽象数据...

rooney
2014/08/15
0
0
Yii2的ActiveRecord与ActiveQuery简单介绍

活动记录 活动记录为与数据库中某张表中的某条记录相关联的对象,我们通过调用此对象的 CURD方法对记录进行操作,Yii2的活动记录其实很标准,AR 类为模型Model,对应数据表,AR 类的实例为活...

big_cat
2016/04/18
2.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
3
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
3
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部