yii2数据库查询生成器--select、from函数用法
创建查询
要创建一个 yii\db\Query 对象,你需要调用不同的查询构建方法来代表SQL语句的不同部分。 这些方法的名称对应了在SQL语句相应子句中使用的关键字。
如,要指定 SQL 语句中的 FROM 子句,你应该调用 from()方法。所有的查询生成器方法返回的是查询对象本身, 即能把多个方法的调用串联起来。
select()
select() 方法指定了 SQL 语句中的 SELECT 子句。 使用一个数组或者字符串来定义需要查询的字段。查询对象在生成 SQL 语句时,被查询的字段名称将会自动的被引号括起来。
$query->select(['id', 'title']); //数组方式指定select字段
// 等同于:
$query->select('id, title'); //字符串方式指定select字段
要查询的字段也能包含表前缀,或者字段别名。 如:
$query->select(['user.id AS user_id', 'title']);
// 等同于:
$query->select('user.id AS user_id, title');
如果使用数组格式来指定字段,也能使用数组的键值来表示字段的别名。 上面的代码等于如下形式:
$query->select(['user_id' => 'user.id', 'title']);
如果没有调用 select() 方法,那么选择的将是 '*' (select *), 也即查询的是所有的字段。
2.0.1 的版本开始你就能使用子查询了。在定义每一个子查询的时候, 需要使用 yii\db\Query 对象。如:
$subQuery = (new Query())->select('COUNT(*)')->from('user');
// SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('post');
调用 distinct() 方法来去除重复行,如:
// SELECT DISTINCT `user_id` ...
$query->select('user_id')->distinct();
如果要添加一个查询字段,调用 addSelect() 方法来指定附加字段,如:
$query->select(['id', 'title'])
->addSelect(['phone']);
from()
from() 方法指定了 SQL 语句当中的 FROM 部分。如:
// SELECT * FROM `user`
$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']);
能从子查询中再次查询,这里的子查询是由 yii\db\Query 创建的对象。 如:
$subQuery = (new Query())->select('id')->from('user')->where('status=1');
// SELECT * FROM (SELECT `id` FROM `user` WHERE status=1) u
$query->from(['u' => $subQuery]);
美景欣赏
相关推荐
深度学习 -- 损失函数
深度残差网络(Deep Residual Networks (ResNets))
深度学习 -- 激活函数
神经网络训练 -- 调整学习速率
生成对抗网络(GAN)改进与发展
生成对抗网络(GAN)优点与缺点
生成对抗网络(GAN)的训练
生成对抗网络(GAN)基本原理
生成模型与判别模型