如何比较条件中的两个字段/列?

2023-12-03

我很难弄清楚如何让子查询工作。

想象一下我有:

    $schools
        ->select($this->Schools)
        ->select([
            'pupilcount' => $this->Pupils
                ->find()
                ->select([
                    $this->Pupils->find()->func()->count('*')
                ])
                ->where([
                    'Pupils.school_id' => 'Schools.id', 

                ]),

我遇到的问题(我认为)是Schools.id始终为 0,因此计数返回为 0。我可以拉出学生连接,它会在那里显示学生。

我尝试更改我的代码以添加:

->select(['SCID' => 'Schools.id'])

并在子查询中引用它,但不起作用,它总是返回 0pupilcount.

我在这里做错了什么?


每当遇到查询问题时,请检查实际生成的查询(例如使用DebugKit)。除非是表达式对象,否则条件的右侧将始终绑定为参数,即与字符串文字进行比较:

Pupils.school_id = 'Schools.id'

通常为了正确的自动引用兼容性,列名应该是标识符表达式。虽然左侧将自动正确处理,但右侧则需要手动处理。

根据您的具体情况,您可以轻松利用QueryExpression::equalFields(),这正是您想要做的事情,比较字段/列:

->where(function (\Cake\Database\Expression\QueryExpression $exp, \Cake\ORM\Query $query) {
    return $exp->equalFields('Pupils.school_id', 'Schools.id');
})

还可以通过简单地实例化标识符表达式来手动创建它们:

->where([
    'Pupils.school_id' => new \Cake\Database\Expression\IdentifierExpression('Schools.id')
])

或者从 CakePHP 3.6 开始,通过Query::identifier() method:

->where([
    'Pupils.school_id' => $query->identifier('Schools.id')
])

最后,您还可以始终传递单个字符串值,该值基本上作为原始 SQL 插入到查询中,但是在这种情况下,标识符将不受自动标识符引用的约束:

->where([
    'Pupils.school_id = Schools.id'
])

See also

  • Cookbook > 数据库访问和 ORM > 查询生成器 > 高级条件
  • API > \Cake\Database\Expression\QueryExpression::equalFields()
  • API > \Cake\Database\Expression\IdentifierExpression
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何比较条件中的两个字段/列? 的相关文章

  • MySQL 获取时间优化

    o我有一个包含 200 万个寄存器的表 但它很快就会增长得更多 基本上 该表包含具有相应描述符的图像的兴趣点 当我尝试执行选择在空间上靠近查询点的点的查询时 总执行时间花费太长 更准确地说 持续时间 获取 0 484 秒 27 441 秒
  • 使用 cfchart 标签在单个饼图中显示多个查询的数据

    请考虑以下代码 现在我的代码中有以下代码 cfm页面内的 tag DataSource xx xx x xx Name of the database sgemail Name of the relevant column event vc
  • grails/mysql 时区更改

    完成更改应用程序时区的最佳方法是什么 在我看来 必须发生以下情况 服务器 TZ 已被系统管理员更改 mysql必须重新启动 数据库中每个基于时间的列都必须使用convert tz 或等效方法更新所有值 因此 要么必须编写一个 mysql 脚
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat
  • 为什么我的浮点数大于 1 时在 MYSQL 中存储为 .9999?

    我将进程时间作为 float 4 4 存储在 MySQL 数据库中 start time microtime TRUE things happen in my script end time microtime TRUE process t
  • 如何使用 AJAX/jQuery 显示打印内容?

    所以我试图理解整个 AJAX jQuery 的事情 现在 当我单独运行这个 PHP 脚本时 我必须等待并观察轮子旋转 直到循环完成然后加载 while row mysql fetch array res postcode to storm
  • 如何在php中根据url从mysql获取数据?

    我在 mysql 数据库中有一个页表 其中包含 page name title content author 字段 我想用 php 来获取它http www domain com index php page page name http
  • Python 的 mysqldb 晦涩文档

    Python 模块 mysqldb 中有许多转义函数 我不理解它们的文档 而且我努力查找它们也没有发现任何结果 gt gt gt print mysql escape doc escape obj dict escape any speci
  • 如何将“mysql source”命令与 mysql 变量一起使用?

    我需要从 mysql shell 执行一个基于如下条件的 SQL 文件 mysql gt 源 var 其中 var 包含文件名 这不可能 source是MySQL客户端程序在本地识别并执行的命令 变量存在于服务器上 因此客户端不知道什么 v
  • 有没有办法在 MySQL 中有效地对 TRUNCATE 或 DROP TABLE 进行 GRANT ?

    我最近在 MySQL 5 5 x 中尝试过 GRANT SELECT INSERT UPDATE DELETE TRUNCATE ON crawler TO my user localhost WITH GRANT OPTION 这会导致错
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci
  • MySQL 最佳实践:SELECT 子递归尽可能提高性能?

    我想选择一个根项目及其子项 使其性能尽可能高 我更喜欢使用嵌套集模型 但这次表结构遵循邻接模型 有关嵌套集和邻接模型的更多信息 http mikehillyer com articles managing hierarchical data
  • 如何根据条件删除结果以计算平均值

    我有下面的架构 对其的快速解释是 鲍勃评分为 5 5 詹姆斯评分 1 5 梅西百货评分高达 5 5 逻辑 如果我是 A 请查找我屏蔽的所有人 查阅所有电影评论 任何留下电影评论且 personA 已屏蔽的人 请将其从计算中删除 计算电影的平
  • 我应该定义索引(A)和索引(B),还是索引(A,B),或者两者都定义?

    在我的表中 我有两个密切相关的列 A 和 B 我应该考虑哪些因素来决定是否创建 索引 A 和索引 B 索引 A B 以上两者 如果我 仅使用类似的查询where A 5 and B 10 并且从不喜欢where A 5 也可以使用类似的查询
  • cakephp 1.1 与 php 5.3

    我刚刚从 php 5 1 升级到 5 3 之前在我的服务器上使用 cakephp 1 1 自从升级 或者可能更早 我不确定 以来 我收到以下错误 任何人都可以透露一些信息 Deprecated Assigning the return va
  • 在shell命令行中创建mysql触发器

    我需要在命令行中创建一个mysql触发器 这个sql在mysql控制台中运行良好 sql USE DB1 DROP TRIGGER IF EXISTS my trigger DELIMITER CREATE TRIGGER my trigg
  • 拉拉维尔; “SQLSTATE[HY000] [2002] 连接被拒绝”

    我在 OSX 主机上设置了 homestead 2 0 并使用 Sequel Pro 我可以进行迁移并确认数据已在Sequel Pro中迁移 因此看起来数据库连接没有问题 但是 一旦我尝试从 Laravel 4 2 应用程序获取数据 它就无
  • 如何比较行内的重叠值?

    我似乎对这个 SQL 查询有问题 SELECT FROM appts WHERE timeStart gt timeStart AND timeEnd lt timeEnd AND dayappt boatdate 时间格式为军用时间 物流

随机推荐

  • 在 Firebase 模型中保存推送的 ID

    我这里有 2 个 firebase 问题 A 以编程方式是一个好的做法吗将ID复制到本地模型 从数据库中排除 解析值时 来自 Firebase 的 Frank 建议该解决方案 在模型 Firebase 上保存 userId B 另一种解决方
  • ASP.Net ScriptMethod 生成空 JSON

    我正在使用 JavaScript 访问名为 GetPerson 的 ScriptService 方法 问题是它返回一个相当空的 JSON 字符串而不是实际的对象字符串 当我返回一个新的 DateTime 对象时也会发生同样的情况 因此我希望
  • LeanModal 不是一个函数

    希望你能帮我解决这个问题 我在我的网站上使用了一些 jQuery 脚本 其中一个是leanModal 我过去已经使用过几次 没有任何问题 我正在开发的网站 使用 WP 工作正常 直到几个小时前该模式停止工作 查看错误控制台 它指出 is n
  • 使用 WebJarAssets & Play 2.5 时如何防止循环依赖?

    在我实施了建议后answer我最后的question 在浏览器中访问该应用程序时收到以下错误 ProvisionException Unable to provision see the following errors 1 Tried p
  • 无法在下一个js上读取firebase中未定义的属性“长度”

    我在下一个 js 中使用 firebase 但它给出了一条错误消息 类型错误 无法读取未定义的属性 长度 无论如何我可以修复这个错误 这是我的 firebase 配置文件 import as firebase from firebase a
  • 同一任务上的多次等待可能会导致阻塞

    在同一个任务上使用多个等待应该小心 我在尝试使用时遇到过这种情况BlockingCollection GetConsumingEnumerable 方法 最终得到这个简化的测试 class TestTwoAwaiters public vo
  • 如何自动启动Solr?

    此刻我必须去 usr java apache solr 1 4 0 example然后执行以下操作 java jar start jar 如何让它在启动时自动启动 我在共享 Linux 服务器上 当您使用共享 Linux 机器时 您可能必须
  • 如何在C#中分割多个字符串

    我的问题包括如何分割这样的字符串 List of devices attached r n9887bc314 tdevice r n12n1n2nj1jn2 tdevice r n r n Into n9887bc314 n12n1n2nj
  • 类似函数的宏和奇怪的行为

    我已经开始阅读 Effective C 在第 2 项中的某个时刻 提到了以下内容 call f with the maximum of a and b define CALL WITH MAX a b f a gt b a b int a
  • 如何将 iPhone 应用程序本地化为不同的语言?

    谁能解释一下如何本地化 iPhone 应用程序 我对 XCode 本地化概念感到困惑 首先 您可以在项目设置中定义要管理的语言 这不是一项必要的工作 但从那里开始真是太好了 然后 对于您想要本地化的每个 XIB 单击它 转到属性面板并添加所
  • 如何连接具有相同前缀(和多个前缀)的文件?

    我有许多具有相同前缀的文件 只有下划线后面的位不同 我也有很多前缀 下划线不会出现在文件名中的其他位置 如何将具有相同前缀的所有文件连接成一个新文件 我补充说 我有数千个不同的前缀 我无法将它们提供给循环 你可以这样做 cat path p
  • iAds 无法显示时留下白色块

    自从更新到 iOS 5 以来 我遇到了 iAds 问题 我发现当广告无法显示时 它会在 iAd 通常所在的位置显示一个大的白色块 有办法解决这个问题吗 我尝试将 iAd 的背景颜色设置为与 UIView 的背景颜色相匹配 但这不起作用 非常
  • 如何将 optgroup 添加到 django ModelMultipleChoiceField?

    我有一个表格ModelMultipleChoiceField到类别列表 我想使用以下方法对类别进行分组Category group field 我认为通过改变领域 choices在 init 函数中它会起作用 class Categorie
  • 使用 qsort 函数以替代方式对整数数组进行排序。

    我最近学习了qsort函数 此 C 代码给出了不正确的输出 需要帮助 问题 以替代方式对整数数组进行排序 偶数索引和奇数索引的元素分别排序 输出 0 4 1 2 5 8 7 5 9 3 10 5 include
  • 两个数组的高效匹配(如何使用KDTree)

    我有两个二维数组 obs1 and obs2 它们代表两个独立的测量系列 并且都具有dim0 2 并且略有不同dim1 say obs1 shape 2 250000 and obs2 shape 2 250050 obs1 0 and o
  • 对数轴标签/刻度定制

    我正在使用JFreeChart用于在我的 Java 应用程序中生成一些图表的 API 在我的一张图表中 我尝试使用LogAxis对象通过以下代码使我的 y 轴成为对数刻度轴 图中的 A LogAxis logAxis new LogAxis
  • 忘记了密钥库密码,正在考虑暴力检测。它会损坏密钥库吗?

    我最近意识到我丢失了密钥库的密码 或者密钥库可能以某种方式损坏了 它一直给我错误 密钥库被篡改或密码不正确 我创建了一个 相当未优化的 算法 通过让它运行整夜来暴力破解密码 但是 我不确定有多少次不成功的密码尝试会锁定密钥库 有谁知道这样的
  • 如何将多个文件附加到Android中的电子邮件客户端

    我在用Intent ACTION SEND获取默认电子邮件客户端 它工作正常 但现在我需要将多个文件附加到电子邮件中 email putExtra android content Intent EXTRA STREAM 仅附加最后添加的 u
  • Ruby roo LoadError:无法加载此类文件 - 电子表格/注释

    尝试加载 xls 文件并收到此错误 有控制台日志 irb main 001 0 gt require roo gt true irb main 002 0 gt a Roo Excel new home a xls LoadError ca
  • 如何比较条件中的两个字段/列?

    我很难弄清楚如何让子查询工作 想象一下我有 schools gt select this gt Schools gt select pupilcount gt this gt Pupils gt find gt select this gt