gin*_*lin 4 sql average sum symfony doctrine-orm
我在我的数据库中有选项卡:PLAYERS和一个标签:SCORES.
在SCORES选项卡中,我有以下行:ID - IDPLAYER - SCORE
例如:
ID IDPLAYER SCORE
---------------------
1 1 5
2 2 4
3 1 3
4 2 1
5 1 9
Run Code Online (Sandbox Code Playgroud)
我想放一个模板:
对于" 玩家1 ",有3个分数.
得分的计数是" 17 "(9 + 3 + 5).
玩家得分的平均值是" 5.6 "(17totscores/3countScores).
我有一个ORM实体,没关系.
我有一个具有此功能的控制器:
public function avgScoreAction($id) {
$queryScore = $this->getDoctrine()
->getRepository('AcmeBundle:tabScores');
$queryAvgScore = $queryScore->createQueryBuilder('g')
->select("avg(g.score)")
->where('g.idPlayer = :idPlayer')
->setParameter('idPlayer', $id)
->getQuery();
$avgScore = $queryAvgScore->getResult();
$result = ("Score average: ".$avgScore);
return new Response($result);
Run Code Online (Sandbox Code Playgroud)
但是我有一个错误:
"Notice: Array to string conversion in this line:"
$result = ("Score average: ".$avgScore);
Run Code Online (Sandbox Code Playgroud)
如果我写这个:
$response = new Response();
$response->setContent(json_encode(array($avgScore)));
$response->headers->set('Content-Type', 'application/json');
return $response;
Run Code Online (Sandbox Code Playgroud)
我明白了:
[[{"1":"5.6667"}]]
Run Code Online (Sandbox Code Playgroud)
这是正确的平均值,但是:[[{"1":"和"}]] ?????
S.T*_*ane 10
what is: [[{"1":" and "}]] ?
Run Code Online (Sandbox Code Playgroud)
1是avg(g.score)查询中的索引.为了更好地理解为什么,尝试一下echo的$queryAvgScore->getDql()之前getResult().
让我们回到一般问题:
SQL是:
SELECT AVG(SCORE) as AVG, COUNT(SCORE) as COUNT, IDPLAYER as PLAYER FROM SCORES GROUP BY IDPLAYER
Run Code Online (Sandbox Code Playgroud)
现在使用查询构建器:
$queryAvgScore = $queryScore->createQueryBuilder('g')
->select("avg(g.score) as score_avg, count(g.score) as score_count")
->where('g.idPlayer = :idPlayer')
->groupBy('g.idPlayer')
->setParameter('idPlayer', $id)
->getQuery();
Run Code Online (Sandbox Code Playgroud)
请注意,我已添加aliases,这比使用索引更好.
希望能帮助到你.