gpt4 book ai didi

mysql - 在 DQL 中加入并计数

转载 作者:可可西里 更新时间:2023-11-01 06:45:17 25 4
gpt4 key购买 nike

我有一个 MySQL 命令,但我找不到 DQL 中的等效命令。我正在尝试获取评论最多的帖子列表。这是 MySQL 命令:

SELECT posts.id, COUNT(comments.id) AS num
FROM posts
LEFT JOIN comments ON ( posts.id = comments.post_id )
GROUP BY posts.id

结果如下:

id  num
1 8
2 9
3 17
4 7
5 6
6 20
7 7
8 10
9 14
10 7

在 DQL 中,它应该是:

SELECT post, COUNT(comment.id) AS num
FROM Entity\Post post
LEFT JOIN post.comments comment
GROUP BY post.id

但这给出了:

id  num
1 50
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0

我不明白 50 是从哪里来的,以及为什么这两个结果之间存在差异。你能告诉我如何使这个连接在 Doctrine 中起作用吗?

最佳答案

我做了一些测试,发现一切似乎都很好。

Video: id, title, ...
Comment: id, video_id, content, ...

数据库模式非常简单,我认为不需要任何解释。

#DQL:
SELECT v.id, COUNT(c.id) AS num
FROM Video v
JOIN v.comments c
GROUP BY v.id
ORDER BY num DESC

#Generated SQL:
SELECT v0_.id AS id0, COUNT(v1_.id) AS sclr1
FROM video v0_
INNER JOIN video_comment v1_ ON v0_.id = v1_.video_id
GROUP BY v0_.id
ORDER BY sclr1 DESC

#Result set:
Array
(
[0] => Array
(
[id] => 148
[num] => 3
)

[1] => Array
(
[id] => 96
[num] => 2
)

[2] => Array
(
[id] => 111
[num] => 1
)

[3] => Array
(
[id] => 139
[num] => 1
)

)

如果您选择整个 Video 对象而不是它的 id(v 而不是 SELECT 中的 v.id子句)查询也将执行。当然,在第 0 元素下会有一个 Video 对象,而不是 id 元素。

在 Doctrine 2.1.0-DEV 上测试

关于mysql - 在 DQL 中加入并计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6326284/

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