在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.
您可能要使用本机查询
$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();
只需根据需要添加任何具有/ where子句。
以下是我的结果:
Array
(
[0] => Array
(
[terrain] =>
[count] => 7
)
[1] => Array
(
[terrain] => 1
[count] => 5
)
[2] => Array
(
[terrain] => 2
[count] => 1
)
)
第terrain
一个数组中缺少的原因是null terrain_id
。
编辑
OP产生了意外的结果,因此这是一些故障排除步骤:
1)在语句 前*
尝试var_dump($query->getSQL());
正确的操作,然后直接对您的数据库运行SQL。如果这产生不正确的结果,请检查查询并适当更改。
*return``$sql
2)如果#1产生正确的结果,请在return语句 之前*
尝试var_dump($query->getResult());
右移。如果这产生正确的结果,则说明您的代码中有更深层的内容。现在该看看为什么被过滤了。它可能与删除和更改SQL和中的别名一样简单。
*terrain``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();
问题内容: 如何加快用? 它太慢并且经常使用。 我用很大的麻烦,并具有300多万行的表。 Relation_title , object_title 为varchar。 其中Relation_title =’XXXX’ ,返回超过1,000,000行,导致 object_title 上的索引 无法正常工作。 问题答案: 为了提高难度,我尝试了以下几种方法: (更轻松) - 确保您具有正确的覆盖指数
问题内容: 我有一个看起来像这样的模型: 我想要为每个类别选择项目的计数(只是计数),因此在SQL中,它会像这样简单: 有没有相当于做这种“ Django方式”?还是纯SQL是唯一的选择?我熟悉Django中的count()方法,但是我看不出group by如何适合那里。 问题答案: 正如我刚刚发现的,这里是如何使用Django 1.1聚合API进行此操作:
我有一个数据帧,我想按两个参数分组(1)相同的第一列中的连续编号和(2)第二列中的匹配值 数据帧: 组1包括前2行,因为30和31是连续的,第二列匹配。创建组2是因为Col1中的31和35不是连续的。创建组3是因为H和E不匹配。 在pandas groupby中对列表中的行进行分组 我很感谢你给我的建议
问题内容: 我有如下的SQL: 并得到结果: 我想总结每个部门的学生人数,如下所示: 我该如何编写sql? 问题答案: 尽管您似乎并未显示所有表格,但我只能假设还有每位学生的实际入学表格 如果您想要与每个学生相关联的每个部门的总数(这没有意义),则可能必须这样做… 我对“姓名”列的解释是学生的姓名,而不是班级实际讲师的姓名,因此,我进行子选择/加入。否则,就像其他人一样,只需要使用COUNT(*)
场景是,对于特定的日期范围,我需要返回字段值已更改(从和到日期)的所有行。更改后的字段值将以不同的颜色显示在屏幕上。 我可以返回特定时间段内发生更改的所有员工记录。但是,如果一个员工的记录在所选时间段内多次更改,我需要返回一个员工记录,并为每个不同的列返回一个组合值。1表示已发生更改,0表示未发生更改。 表DDL为: 模拟数据是: 我的疑问是: 在最后一个查询中,我将添加以下行以返回当前记录。我省
问题内容: 我正在尝试转换此查询(已经可以使用) 对于Linq to SQL,但我不知道自己在做什么错。看我的尝试 我只需要对建筑物进行分组并计算每个建筑物有多少用户。 问题答案: 只需使用以下方法: