子查询
构造子查询 SQL,可以使用下面两种方式来构建。
使用 fetchSql
方法
fetchSql
方法表示不进行查询而只是返回构建的 SQL 语句,适用于任何 CURD
查询。
使用示例:
$subQuery = Db::table('user')
->where('id', '>', 10)
->fetchSql(true)
->select('id');
生成的 subQuery 结果为:
SELECT `id`,`name` FROM `user` WHERE `id` > 10
使用上述方法获得 subQuery 语句以后,可以进行如下操作
Db::table('user')
->where('id', 'NOT IN', $subQuery)
->order('id', 'desc')
->select();
生成的SQL语句为:
SELECT * FROM `user` WHERE `id` NOT IN (SELECT `id` FROM `user` WHERE `id` > 10) ORDER BY `id` DESC
使用 buildSql
方法
调用 buildSql
方法后不会进行实际的查询操作,而只是生成该次查询的 SQL 语句,该方法只能返回 where、whereAnd、whereOr 方法产生的语句,其他方法请使用 fetchSql
方法。
$where = array(
array('name', 'LIKE', '%baigo', 'key', 'str'),
array('title', 'LIKE', '%baigo', 'key', 'str'),
);
$subQuery = Db::where($where)->buildSql();
生成的 subQuery 结果为:
`name` LIKE '%baigo' AND `title` LIKE '%baigo'
使用上述方法获得 subQuery 语句以后,可以进行如下操作
$field = array('id', 'name');
Db::table('user')
->where('id', '>', 10)
->whereAnd($subQuery)
->order('id', 'desc')
->select($field);
生成的SQL语句为:
SELECT `id`,`name` FROM `user` WHERE `id` > 10 AND (`name` LIKE '%baigo' AND `title` LIKE '%baigo') ORDER BY `id` DESC