thinkphp:数据库查询,嵌套别的表的查询(别的表做子查询)

这篇具有很好参考价值的文章主要介绍了thinkphp:数据库查询,嵌套别的表的查询(别的表做子查询)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 例子

  1. 从 vendors 表中选择记录。
  2. 在 vendors 表中,筛选出具有满足以下条件的 vendor_code 值:
    • 对应的采购订单(在 po_headers_all 表中)存在未完全接收的采购行(在 po_lines_all 表中)。
    • 相应的采购订单状态为 "已签核"。
    • 采购行的数量大于已接收数量。
  3. 查询结果按照 vendor_code 字段降序排列,并限制返回的结果集的起始位置和数量。

代码

$data['all_info'] = Db::table('vendors')
    ->alias('d')
     ->whereExists(function ($query) {
        $query->table('po_headers_all')
            ->alias('a')
            ->join(['po_lines_all'=>'b'], 'a.po_num = b.po_num')
            ->where('b.quantity', '>', Db::raw('b.quantity_received'))
            ->where('a.status', '已签核')
            ->where('a.vendor_code = d.vendor_code');
    })
    ->order('vendor_code', 'desc')
    ->limit($start,$pageSize)
    ->select();

逐句解析 

  • $data['all_info'] = Db::table('vendors'): 创建了一个变量 $data['all_info'],用于存储查询结果。使用 Db::table('vendors') 指定了要查询的数据表为 "vendors"。

  • ->alias('d'): 使用别名 "d" 来表示数据表 "vendors"。

  • ->whereExists(function ($query) { ... }): 使用 whereExists 方法来指定一个子查询。子查询中的条件将用来检查是否存在满足条件的记录。

  • $query->table('po_headers_all')->alias('a'): 在子查询中,指定要查询的数据表为 "po_headers_all",并使用别名 "a" 来表示该表。

  • ->join(['po_lines_all'=>'b'], 'a.po_num = b.po_num'): 将数据表 "po_headers_all" 与 "po_lines_all" 进行连接,连接条件是 "a.po_num = b.po_num"。

  • ->where('b.quantity', '>', Db::raw('b.quantity_received')): 在连接后的数据表中,添加条件 "b.quantity > b.quantity_received"。这个条件用来筛选数量未完全接收的记录。

  • ->where('a.status', '已签核'): 添加条件 "a.status = '已签核'",用来筛选状态为 "已签核" 的记录。

  • ->where('a.vendor_code = d.vendor_code'): 添加条件 "a.vendor_code = d.vendor_code",将子查询中的 vendor_code 与主查询中的 vendor_code 进行比较,以确保查询结果中的记录是符合条件的。

  • ->order('vendor_code', 'desc'): 根据 vendor_code 字段降序排序查询结果。

  • ->limit($start, $pageSize): 指定查询结果的分页限制,从 $start 开始,取 $pageSize 条记录。

  • ->select(): 执行查询操作,获取符合条件的记录,并将结果返回给变量 $data['all_info']文章来源地址https://www.toymoban.com/news/detail-695353.html

 查询总数量同理(注:去掉了限制条件)

$data['total'] = Db::table('vendors')
    ->alias('d')
    ->whereExists(function ($query) {
        $query->table('po_headers_all')
            ->alias('a')
            ->join(['po_lines_all'=>'b'], 'a.po_num = b.po_num')
            ->where('b.quantity', '>', Db::raw('b.quantity_received'))
            ->where('a.status', '已签核')
            ->where('a.vendor_code = d.vendor_code');
    })
    ->count();

到了这里,关于thinkphp:数据库查询,嵌套别的表的查询(别的表做子查询)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql数据库表的多条件查询

    select可以返回多条数据也可以返回一条数据 如果要查询所有的字段可以用 *****代替 where后面跟的是筛选条件(可选) N 是返回的数据条数(可选) M 是数据的偏移量(可选) 例如:在职位招聘表中获取在长沙雨花区的前10条信息 通用语法 : 询语句中你可以使用一个或者多个

    2024年02月11日
    浏览(36)
  • {MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 承接上文,继续讲一下MySQL 提示:以下是本篇文章正文内容,下面案例可供参考 NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列的每行必须有唯一的值

    2024年02月03日
    浏览(41)
  • 编写jsp页面实现对数据库表的查询

    在本次作业中,我将eclipse与sql server连接起来,并在SSMS中进行插入数据,从而编写jsp页面实现对数据库表的查询。 一、连接数据库 按照(4条消息) eclipse连接SQL server数据库_eclipse如何连接数据库_shexianyu的博客-CSDN博客 教程中的步骤,最初只得到了加载驱动成功,连接数据库失

    2024年02月07日
    浏览(31)
  • ②【MySQL表操作】 数据库表的创建、查询、修改、删除

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 数据库表中的数据类型 : 数值类型: TINYINT :小整数 SMALLINT :大整数 MEDIUMINT :大整数,范围大于SMALLINT

    2024年02月06日
    浏览(38)
  • mysql和sqlserver查询数据库表的数量的方法

    一、mysql查询数据库表的数量 1、查询mysql下所有数据库表的数量 2、查询指定数据库的表的数量   二、sqlserver查询数据库表的数量 1、查询指定数据库的表的数量(选择指定的sqlserver数据库后再执行语句) 2、xtype 的描述 (1)数据类型:char(2)。  (2)对象类型。常用列。

    2024年02月07日
    浏览(33)
  • 【MySQL】表的增删改查——MySQL基本查询、数据库表的创建、表的读取、表的更新、表的删除

         CURD是一个数据库技术中的缩写词,它代表Create(创建),Retrieve(读取),Update(更新),Delete(删除)操作。 这四个基本操作是数据库管理的基础,用于处理数据的基本原子操作。      在MySQL中,Create操作是十分重要的,它帮助用于创建数据库对象,如数据

    2024年03月18日
    浏览(45)
  • 在Azure SQL DB/Azure托管实例里快速查询各数据库大小以及每个数据库下表的大小

    目录 (一)前言 (二)正文 1. 环境: 2. 查看实例下每个数据库的空间大小 (1) SQL语法 (2)运行结果 3. 查看特定数据库下每张表的大小 (1)SQL语法 (2)运行结果 日常工作中对于各个数据库以及每一个数据库中下辖的表的大小,是我们日常监控以及分析问题的重要方向

    2024年02月11日
    浏览(53)
  • ThinkPHP6之数据库操作上

    注意,tp6在进行语法学习的时候都是在app/index.php中写代码的,代码写在index函数下面,而且 tp6自带的文件都是由自动加载器的,不需要包含autoload.php文件 要对数据库进行操作,要修改两个地方,一个数.env文件,一个是config/database.php文件 config/database.php connections里面的一个子

    2024年02月01日
    浏览(71)
  • thinkphp学习06-连接数据库与模型初探

    插入数据 修改.env数据库配置 测试环境下是可以使用的,但是到了线上建议配置到config下database.php 可以通过删除改变.env 的配置,或删除.env 来验证 database 的执行优先级,经过验证可知:.envdatabase.php 新建DataTest.php connections 配置数据库连接信息,可以是多个数据库,便于切换,

    2024年01月16日
    浏览(30)
  • 解决Oracle数据库中日期格式不识别的问题

    在数据库开发中,我们经常需要处理日期和时间数据。当我们在Oracle数据库中执行UPDATE语句时,可能会遇到ORA-01821错误,该错误表示提供的日期格式无法被数据库识别。本文将介绍如何解决Oracle数据库中日期格式不识别的问题。 问题分析: ORA-01821错误是由于提供的日期字符

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包