symfony 中的子查询

Posted

技术标签:

【中文标题】symfony 中的子查询【英文标题】:Subqueries in symfony 【发布时间】:2016-12-31 02:26:57 【问题描述】:

我有一个包含以下字段的评论实体:

id
userID
bookID
review

然后是包含以下字段的评级实体:

id
reviewID
userID
rating

评级可能存储 0 或 1。

我将如何使用 symfony 执行查询以计算评级表中等于 1 的所有评级,然后计算等于 0 的评级,然后从 1 评级的计数中减去 0 评级的计数并返回它每条评论?

我该怎么做?看起来很棘手

【问题讨论】:

您的实体是否以某种方式相关?! (OneToMany/MenyToOne 关系) @Preciel 是的,一对多和多对一 那您可以发布您的实体文件吗?!我看不出它们是如何与这么少的数据联系起来的......否则,你的问题没有什么难的,这一切都发生在树枝上,你会做类似% for rating in review.rating %的事情,然后遍历评级......当您的问题更新时,我会发布完整的回复(或者其他人可能比我快) 您好,KTOV。我不确定我是否理解您需要的 Doctrine 查询?所以你想要:COUNT(ra.rating = 1) - COUNT(ra.rating = 0),然后用这个数字(结果)你想用它做什么?我显示的查询不是 SQL。不知何故,您想查看评论,但由于 Review 和 Rating 实体之间存在关系,为什么不获取所有 ra.rating = 1 的 Ratings,然后获取评论。这是你需要的吗? 同意AlvinBunk 【参考方案1】:

好吧,因为你正在使用 Symfony,我假设你也在使用 Doctrine。

Doctrine 允许您执行本地查询。看看如何执行原生查询here。 在 mysql 上,您可以执行 子查询,请查看 here 了解如何操作。

然后尝试这样的事情:

SELECT rv.* , ((SELECT count(*) FROM ratings ra WHERE ra.rating = 1 AND id rv.id = ra.reviewID) - (SELECT count(*) FROM ratings ra WHERE ra.rating = 0 AND id rv.id = ra.reviewID)) as result FROM review rv;

看看here 如何获取附加到实体的值。

【讨论】:

如果您确实阅读了 cmets,您会明白不需要您刚刚提出的内容...只要实体彼此相关,Symfony 就会执行子查询...并且看在上帝的份上,使用 DQL...Here 你可以找到我不久前写的一个很好的 DQL 示例 @Preciel gragonmau 的回答是正确的。 KTOV 需要使用 Doctrine 来做他想做的事!虽然我认为 KTOV 需要澄清他实际需要的确切查询。 @KTOV 有没有办法使用 DQL 应用计数功能?通常在执行这种计算字段时,我更喜欢在数据库大小而不是 php 端进行。数据库往往比 Web 服务器更愿意处理这种操作,有时它可能会导致性能问题。这就是为什么我建议使用 Native Query 而不是 DQL。

以上是关于symfony 中的子查询的主要内容,如果未能解决你的问题,请参考以下文章

SELECT 中的子查询或 JOIN 中的子查询?

SQL中的子查询

MySQL基础语法之子链接查询和特殊查询(union 和 limit)

MySQL的子查询中FROM和EXISTS子句的使用教程

替换雪花中的子查询

[转]HQL中的子查询