yii2 数据库操作2
2015-06-29 14:22
656 查看
Query Builder
[php] viewplaincopy
$rows = (new \yii\db\Query())
->select(['dyn_id', 'dyn_name'])
->from('zs_dynasty')
->where(['between','dyn_id', 1,30])
->limit(10)
->all();
print_r($rows);
[php] view
plaincopy
use yii\db\Query;
$query = (new Query())
->from('user')
->orderBy('id');
SELECT
[php] view
plaincopy
$query->select('*')->
select('dyn_id as id, dynasty.dyn_name')->
$query->select(['dyn_id as id', "CONCAT(dyn_name,'a')"])->
$query->select('user_id')->distinct()->
FORM
[php] view
plaincopy
$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
[php] view
plaincopy
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
ADD WHERE
[php] view
plaincopy
$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
[php] view
plaincopy
$query->filterWhere([
'username' => $username,
'email' => $email,
]);
//如果email为空,则 WHERE username=:username
ORDER BY
[php] view
plaincopy
$query->orderBy([
'id' => SORT_ASC,
'name' => SORT_DESC,
]);
//orderBy , addOrderBy
GROUP BY
[php] view
plaincopy
$query->groupBy('id, status');
$query->addGroupBy(['created_at', 'updated_at']);
HAVING
[php] view
plaincopy
$query->having(['status' => $status]);
//having,andHaving,orHaving
LIMIT OR OFFSET
[php] view
plaincopy
$query->limit(10);
$query->offset(10);
JOIN
innerJoin()
leftJoin()
rightJoin()
[php] view
plaincopy
$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
[php] view
plaincopy
$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 为字段或表达式
[php] view
plaincopy
$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
[php] view
plaincopy
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
[php] view
plaincopy
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) {
// 一行一行取
}
相关文章推荐
- make only output error/warning message( 编译时,只输出错误信息和警告信息)
- Laravel5.1学习笔记5 请求
- PHP效率优化
- ContentProvider+ContentObserver实例
- Zend Studio / Ecliplse插件EasyExplorer,打开资源文件所在的文件夹
- phpcms v9 模板标签技巧,标签调用方法大全
- phpcms v9 模板标签技巧,标签调用方法大全
- php中socket的使用 方法简介
- phpcms v9调用当前栏目的同级栏目的几种方法
- phpcms v9调用当前栏目的同级栏目的几种方法
- php使用逆波兰算法实现四则运算器
- 简单使用 PHP Phar 打包php代码 笔记
- php循环跳出
- php 远程上传(CURL)
- IIS7.5配制支持PHP脚本错误代码0x80070002
- php 异步上传原理(iframe)
- Yii封装级联select,多次用到,总结一些,直接代码
- SAP FTP
- [PHP]php发布和调用Webservice接口的案例
- yii使用CArrayDataProvider进行数组分页