gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:43:38 25 4
gpt4 key购买 nike

在 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.

最佳答案

您可能想要使用 Native Query

$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());之前 return语句,然后直接针对您的数据库运行 SQL。如果这会产生不正确的结果,请检查查询并更改 $sql作为适当的。

2) 如果#1 产生正确的结果,请尝试 var_dump($query->getResult());之前 返回语句。如果这产生了正确的结果,则说明您的代码中发生了更深层次的事情。是时候看看为什么 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();

关于sql - symfony2 - Doctrine - 如何使用计数和分组进行多重选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18992156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com