闭包子查询
最编程
2024-04-15 16:49:44
...
闭包子查询
学完前面的三种生成子查询语句的方法,闭包子查询就很简单了。闭包查询通常产生一个结果集,非常适合IN / NOT IN 或 EXISTS / NOT EXISTS 查询
实例演示:
任务1:查询tp5_staff表中优秀员工的基本信息(id,name,salary)
优秀员工信息存放在tp5_good表中,需要在该表做子查询,先获取优秀员工id,我们用闭包匿名函数来实现来获取满足条件的数据表;然后再把这个数据列集合做为父查询的条件传入到 “IN” 子句就可以了。
- 下面是Index.php 控制器的代码:
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index(){
//1.生成子查询闭包:查询tp5_good表中good=1的员工id
$subQuery = function($query){
$query -> table('tp5_good') //设置数据表,不允许同表查询
-> field('id') //字段必须与父查询的条件字段一致
-> where('good','=',1); //设置子查询条件:good = 1 即优秀
};
//2.执行父查询:将子查询
$result = Db::table('tp5_staff') //设置数据表
-> field('id,name,salary') //设置结果集字段列表
-> where('id','in',$subQuery) //将子查询闭包传给父查询字段IN条件
-> select(); //获取结果集
//3.查看结果
dump($result);
}
}
- 对应生成的SQL语句:
SELECT `id`,`name`,`salary` FROM `tp5_staff` WHERE `id` IN ( SELECT `id` FROM `tp5_good` WHERE `good` = 1 )
- 由于生成的数据较多,我们就直接在SQLPRO中看结果了:
推荐阅读
-
查询每日数据最大值的 sql 语句
-
介绍 SQL(数据库查询语言)和基本命令 [查看数据库/数据表、创建数据库/数据表、使用数据库/数据表、删除数据库/数据表、如何进行注释
-
使用 Redux 工具包和 RTK 查询创建 React 应用程序
-
FFmpeg 命令行参数 ⑦ ( 使用 FFmpeg 提取 PCM 音频数据 | PCM 音频格式 | 提取 PCM 音频格式常用参数 | 查询文档方法 )
-
腾讯云录音文件识别请求与结果查询
-
如何查询 mysql 的年龄范围 mysql 查询大于 30 岁的年龄
-
网易云音乐怎么看听歌次数 网易云音乐听歌排行查询步骤介绍
-
elasticsearch8.5.0 复杂查询 - Java API 客户端 - 组合+页面+排序+分组查询
-
InfluxDB 的连续查询和数据聚合技术详解
-
数据库约束 | 表设计 | 聚合查询 | 联合查询 - MySQL 精细化库