6

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がどこから来たのか、なぜ2つの結果に違いがあるのか​​わかりません。この参加をDoctrineで機能させる方法を教えてください。

4

3 に答える 3

8

I've made a few test and I found that everything seems to be fine.

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

Database schema is very simple and I think there's no need for any explanation.

#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
            )

    )

If you select entire Video object instead of its id (v instead of v.id in SELECT clause) the query will execute as well. Of course instead of id element there will be an Video object under 0th element.

Tested on Doctrine 2.1.0-DEV

于 2011-06-16T22:50:28.097 に答える
0

EDITED : People - この回答は機能しませ。少なくとも、考えられる解決策からこれを排除できます。

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

post.idではなくでグループ化していましたpost

ところで、これは完全な推測です。DQL はわかりませんが、休止状態は知っています。似ているように思えます。間違っている場合は、この回答を削除します - コメントでお知らせください。

于 2011-06-15T22:33:13.297 に答える
-1

私はDQLを知りません。これはばかげているかもしれません....しかし、あなたはこれを投稿しました:

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

を選択するべきではありませんpost.idか?奇妙に聞こえるかもしれませんが、私が理解していることから、select postと同等select *です。それでも、出力では ID 列しか取得していません。注目に値するかもしれないと思いました(そうでなくても)。

/反対票の準備

于 2011-06-16T03:53:52.467 に答える