Jsnpp框架怎么实现子查询
发布时间: 2021年5月12日 上午10:50 作者: Jsnpp 访问量: 620

我们在前面的教程里面详细介绍了一些Jsnpp框架的数据库查询操作,包括单表查询、多表查询、聚合查询等内容,这一篇我们来介绍子查询。

我们先来看下面的示例代码:

$this->app->db->table('subtable')->where('test', 1)->field('uid')->box('subquery')->subquery()->table('users')->where('id', 'IN', ':box(subquery)')->field('id,name')->paging(10)->select()->finish();

我们看到以上代码也是一个全链语句,下面我们来详细解读一下这个代码。

全链语句的开头和结尾我们已经很熟悉了,“$this->app”表示应用开始,“->finish()”表示全链结束。我们来详细解释中间部分的数据库语句。

我们看到上面语句里面有两个“table”,表示两张表,其中“subtable”是用于子查询的表,我们看对应这张表的数据库语句:

->table('subtable')->where('test', 1)->field('uid')->box('subquery')->subquery()

上面的部分代码里面的“where”表示条件,“field”表示字段,“->subquery()”表示这是一个子查询,“->box('subquery')”表示子查询的结果放入盒子“subquery”。

我们再来看后半段数据库语句:

->table('users')->where('id', 'IN', ':box(subquery)')->field('id,name')->paging(10)->select()

这里的语句跟我们前面学习过的数据库查询语句没有什么区别,只是在条件“where”里面我们是这样写的代码:“->where('id', 'IN', ':box(subquery)')”,这个代码的意思是“id”是在子查询的结果集里面的,其中“:box(subquery)”表示名称为“subquery”的盒子,因为我们在前面的代码里面把子查询的结果放入这个盒子里面了。

至此,我们来总结一下怎么实现子查询语句,事实上,子查询在Jsnpp框架里面的语法也是很简单的,我们只需要使用“->subquery()”来实现子查询,并且把查询结果放入盒子,然后在后续代码里面需要的地方从盒子里面取出来就可以了。

数据库语句里面取出盒子内容的方法是“:box(盒子名称)”,注意,这里是以冒号开头的,括号里面没有引号,直接写上盒子名称就可以了。

出错
提交成功!
评论已经提交。
我们已经收到您的反馈!
/index/like.html
/index/dislike.html
/index/postpassword.html
Jsnpp
自豪地采用 Jpwrt