symfony2 - Doctrine - 如何使用计数和分组进行多重选择

2024-02-19

在 Symfony2 和 Doctrine 中,我想执行一个返回计数和分组依据的查询。

这是我尝试过的。这是我要运行的 SQL:

SELECT   `terrain_id` , COUNT( * ) 
FROM     `Partie` 
WHERE     1 =1
GROUP BY `terrain_id`

与我的实体:

class Partie
{   
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Gp\UserBundle\Entity\User", 
        inversedBy="parties",         cascade={"persist"})
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="Gp\JeuxBundle\Entity\Terrain")
     */
    private $terrain;

这是我的 PartieRepository

public function getTest(\Gp\UserBundle\Entity\User $user){
    return $this->createQueryBuilder('p')
    ->select('count(p), p.terrain')
    ->where('p.user = :user')
    ->setParameter('user', $user)
    ->groupBy('r.terrain')
    ->getQuery()
    ->getResult();
}

这是我得到的错误:

[Semantical Error] line 0, col 19 near 'terrain FROM': Error: 
Invalid PathExpression.   Must be a StateFieldPathExpression.

您可能会想要选择原生查询 http://docs.doctrine-project.org/en/latest/reference/native-sql.html

$sql = "SELECT terrain_id as terrain,
                count(*) AS count "
            ."FROM Partie "
            ."GROUP BY terrain_id;";


$rsm = new ResultSetMapping;
$rsm->addScalarResult('terrain', 'terrain');
$rsm->addScalarResult('count', 'count');
$query = $this->_em->createNativeQuery($sql, $rsm);
return $query->getResult();

只需根据需要添加任何having/where 子句即可。

以下是我的结果:

Array
(
    [0] => Array
        (
            [terrain] => 
            [count] => 7
        )

    [1] => Array
        (
            [terrain] => 1
            [count] => 5
        )

    [2] => Array
        (
            [terrain] => 2
            [count] => 1
        )

)

缺乏terrain第一个数组中的值是 nullterrain_id.

EDIT

OP 出现意外结果,因此以下是一些故障排除步骤:

1)尝试一个var_dump($query->getSQL()); right before the return语句,并直接针对您的数据库运行 SQL。如果这产生了不正确的结果,请检查查询并更改$sql作为适当的。

2) 如果#1 产生正确的结果,请尝试var_dump($query->getResult()); right before返回语句。如果这产生了正确的结果,则说明您的代码中发生了更深层的事情。是时候看看为什么了terrain正在被过滤。它可能就像删除或更改 SQL 中的别名一样简单addScalarResult.

3)尝试一个更简单的函数:

    $sql = "SELECT distinct(terrain_id) FROM Partie;";

    $rsm = new ResultSetMapping;
    $rsm->addScalarResult('terrain_id', 'terrain_id');
    $query = $this->_em->createNativeQuery($sql, $rsm);
    var_dump($query->getSQL());
    var_dump($query->getResult());
    return $query->getResult();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

symfony2 - Doctrine - 如何使用计数和分组进行多重选择 的相关文章

  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • 如何使用第二行中的值填充第一行中的空值?

    我正在尝试编写一个查询 仅显示每个名称的第一行 但这些行的标题为空 因此我想从紧邻的下一行中提取它们的标题 table1 Name Title Row Dan NULL 1 Dan Engineer 2 Dan Developer 3 Ja
  • MySQL LIKE %string% 不够宽容。我还有什么可以用的吗?

    我有一位客户询问他们的搜索是否可以搜索公司名称 这些名称可以根据用户输入以多种格式进行搜索 例如数据库中存储的公司是 A J R Kelly Ltd 如果用户搜索 一个 J R Kelly 被发现 使用
  • ORA-00933 与内部联接和“as”混淆

    我有一个使用以下命令从两个表中获取数据的查询inner join 但我收到错误SQL command not properly ended as 下面有一个星号 select P carrier id O order id O aircra
  • 通过 SQLAlchemy 获取随机行

    如何使用 SQLAlchemy 从表中选择一个或多个随机行 这在很大程度上是一个特定于数据库的问题 我知道 PostgreSQL SQLite MySQL 和 Oracle 具有通过随机函数排序的能力 因此您可以在 SQLAlchemy 中
  • 如何对多行的一列值求和?

    我有这个表 我想添加几行的 change 列的值 或者更准确地说 从 ne 值为零的行到 ne 值为零的下一行 不是第二个本身 任何答案将不胜感激 rn date ne change 0 2008 12 07 0 10330848398 1
  • SQL UPDATE 语句根据另一个现有行更新列

    基本上我有一个与下表具有相似格式的表格 我想做的是根据这个逻辑更新 Col4 如果 Col2 为空 则用 Col3 更新 Col4 如果 Col2 不为 null 则在 Col1 中查找与 Col2 中的值匹配的值 使用 col3 中的相应
  • 自动提取数据 - Oracle SQL Developer

    我通过 SQL Developer 连接到 Oracle 数据库 我想编写一个返回每月数据集的查询 然后将该数据提取到分隔文本文件中 我知道如何做到这一点就好了 我想知道是否有一种方法可以编写一个脚本来运行查询并在一年内逐月提取数据 这样我
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • MySQL:如何获取每个分组的x个结果数[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 根据由另一列分组的不同列的最大值获取值[重复]

    这个问题在这里已经有答案了 我想根据由另一列分组的不同列的最大值来获取列的值 我有这张表 KEY NUM VAL A 1 AB B 1 CD B 2 EF C 2 GH C 3 HI D 1 JK D 3 LM 并想要这样的结果 KEY V
  • 以编程方式插入行(父行和子行)

    我正在使用 Spring 和 JDBCTemplate 该场景是 CUSTOMER 表和 ORDERS 表的父子关系 我想做一个插入 例如 1 个客户和 5 个订单 但我不确定如何以编程方式在 CUSTOMER 表中插入一行 如何获取 Or
  • 包含列和行总计的 SQL 数据透视表

    我正在尝试将行和列总计添加到该数据透视表中 create table test4 city nvarchar 10 race nvarchar 30 sex nvarchar 10 age int insert into test4 val
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • 时间序列数据的自连接

    我需要一些帮助来完成我认为应该是相当简单的自连接查询 只需要将两条记录中匹配的开始时间和结束时间合并为一条记录 假设我的表中有以下内容 Time Event 08 00 Start 09 00 Stop 10 30 Start 10 45
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • 在同一查询中选择 Count of ip 和 Count of DISTINCT ip

    我有一个这样的表结构 TABLE NAME counter id datetime url ip 1 2013 04 12 13 27 09 url1 ip01 2 2013 04 13 10 55 43 url2 ip02 3 2013
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We

随机推荐

  • Delphi与C++ dll通信(参数)

    您好 我在将 DLL 集成到 Delphi 2007 应用程序中时遇到了一些问题 我怀疑我的调用参数有问题 目前我有两个问题 但我认为它们是相互关联的 1 首先调用 DLL 从 h 文件 extern C declspec dllexpor
  • 带有 dotnet pack 的软件包版本始终为 1.0.0

    TLDR 在哪里dotnet pack在为程序集创建 nuget 包时提取版本信息 我有一个库 我已将其从 NET 4 6 1 项目转换为 NET Core 项目project json 对于我在此期间的 CI 使用 TFS 2015 vn
  • 如何在 Rails 5.1 中运行无头浏览器系统测试?

    The Rails 5 1 系统测试文档 http guides rubyonrails org testing html implementing a system test有点稀疏 我无法获得执行 javascript 运行的无头测试
  • 如何防止 SSRS 报告中的正文自动调整大小

    我有一份报告 其中的页眉和页脚都设置为填充整个 A4 长度 当然减去边距 因为我有一些关于它们的最右侧和最左侧的信息 现在 在正文中 我有一个列表元素 它允许我将 tablix 报告和图表放在一起 正文的大小也适当 以保持在报告的页码限制内
  • 经过几次乘法**有溢出**之后,是否有可能得到一个数字的原始值?

    概括 有没有办法做到这一点 这就是我的意思 假设我有一个无符号整数数字 然后我将其相乘几次 并且出现溢出 这是预期的 那么是否可以 恢复 原来的值呢 详细信息 这全都是关于Rabin Karp 滚动哈希 http en wikipedia
  • ParseUI 本地化

    由于 ParseUI 是开源的 因此很容易发现所有标签都在 ParseUI strings 中本地化 如何告诉 xcode 在运行时不要使用 ParseUI strings 而使用 Localisable strings 我在我的项目中创建
  • 尝试使用 Java 中的 Gmail API 发送电子邮件时出错

    我想使用 Gmail API 而不是 JavaMail 发送电子邮件 我在论坛上读到了很多类似的主题 但仍然有一个问题 首先我读到了这个 https developers google com gmail api guides sendin
  • 如何在XML中编写具有多个命名空间的xsd文件?

    当我在 mec xsd 中定义 XML 模式时 它不适用于该元素 我该如何解决这个问题 谢谢
  • 在 Eclipse CDT 中创建一个新的 C++ 项目,设置与另一个项目相同

    是否有一种简单的方法来创建克隆现有项目设置的新 C 项目 在开发 C 时 我喜欢编写许多小测试和示例 但如果我的代码依赖于外部库 就像它们经常做的那样 我必须每次都从头开始设置包含 库 编译器设置等 有某种模板机制吗 我了解 C C 项目设
  • node.js oracledb 不插入也不更新

    节点 oracledb 版本 1 2 节点 v0 12 7 按预期选择工作 对于更新和插入 虽然我们得到 rowsAffected 1 但插入或更新不受影响 var oracledb require oracledb oracledb ge
  • 使用本地存储存储多个项目的复选框“已选中”

    我想将我的复选框保存到本地存储 但是我使用的这段代码对于多个复选框来说太麻烦了 有没有更好的方法来做到这一点 setStatus document getElementById LineOp setStatus onclick functi
  • 调用其他程序时Powershell变量扩展

    我在尝试使用解压缩文件时遇到一个小问题7za http 7 zip org download htmlPowershell 中的命令行实用程序 我设置了 zip source变量为 zip 文件的路径和 unzip destination到
  • 在 Vue.js 中使用异步/等待模式

    我想在我的新 Vue js 项目中使用 async await 模式 然而 在我第一次尝试后 它抛出了一个错误
  • TreeMap 是如何排序的

    如何TreeMap种类 举例来说 您有以下地图 TreeMap
  • 当互联网断开连接时,HttpClient PostAsync 不响应

    我有一个 xamarin 表单应用程序 该应用程序执行PostAsync调用将图像作为多部分内容上传 问题是在 iOS 设备中 当我在 PostAsync 调用期间关闭 wifi 移动数据时 HttpClient 不会进入 catch 块来
  • 如何从C#读取中文文本文件?

    如何使用 C 读取中文文本文件 我当前的代码无法显示正确的字符 try using StreamReader sr new StreamReader path System Text Encoding UTF8 This is an arb
  • 如何将JScrollPane布局设置为与JTable相同?

    Tabel1 setModel new DefaultTableModel x y JScrollPane pane new JScrollPane Tabel1 当我运行该程序时 滚动窗格看起来比表格大 如何使滚动窗格布局与表格相同 ho
  • Angular 4 - 获取输入值

    我想知道如何从角度 4 上的输入获取值 我查看了有关 Angular 的文档 并且带有关键事件的示例对我来说效果不太好 我找不到正确的示例如何做到这一点 所以请帮助我 问题 我尝试读取输入的值 然后将值提交到另一个组件 该组件会将值添加到选
  • 如何在opencv中使某些像素透明?

    我用 for 语句检查了每个像素的亮度 并尝试在亮度超过 100 时使其透明 但隐形是行不通的 看代码 image al x y 的第四个是alpha 我应该怎么办 如果你使用 bgr 的值而不是透明度 它就会改变 image cv2 im
  • symfony2 - Doctrine - 如何使用计数和分组进行多重选择

    在 Symfony2 和 Doctrine 中 我想执行一个返回计数和分组依据的查询 这是我尝试过的 这是我要运行的 SQL SELECT terrain id COUNT FROM Partie WHERE 1 1 GROUP BY te