Bli med og telle i DQL

stemmer
6

Jeg har en MySQL-kommandoen, og jeg kan ikke finne tilsvarende i DQL. Jeg prøver å hente listen mest kommenterte innlegg. Her er MySQL-kommandoen:

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

Her er resultatet:

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

I DQL, bør det være:

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

Men dette gir:

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

Jeg forstår ikke hvor 50 kommer fra og hvorfor det er en forskjell mellom de 2 resultater. Kan du fortelle meg hvordan du gjør dette bli arbeidet i Lære?

Publisert på 13/06/2011 klokken 03:04
kilden bruker
På andre språk...                            


3 svar

stemmer
8

Jeg har gjort noen test, og jeg fant ut at alt ser ut til å være i orden.

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

Databaseskjema er veldig enkelt, og jeg tror det er ikke behov for noen forklaring.

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

    )

Hvis du velger hele Videoobjekt i stedet for sin id ( vi stedet for v.idi SELECTklausul) spørringen vil utføre også. Selvfølgelig istedenfor idelementet vil det være en Videogjenstand under 0 th element.

Testet på Lære 2.1.0-DEV

Svarte 16/06/2011 kl. 22:50
kilden bruker

stemmer
0

Redigert : People - Dette svaret betyr ikke fungerer. Minst kan du fjerne dette fra mulige løsninger.

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

Du ble gruppering av post.id, ikkepost

btw, er dette en total gjetning. Jeg vet ikke DQL, men jeg vet dvale, og det virker lik-ish. Hvis det er feil jeg vil slette dette svaret - gi meg beskjed ved kommentar.

Svarte 15/06/2011 kl. 22:33
kilden bruker

stemmer
-1

Jeg vet ikke DQL, og dette kan være dumt .... men du postet dette:

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

Burde ikke du skal velge post.id? Jeg vet det høres rart, men fra hva jeg forstår, select poster tilsvarende select *. Men i utskriften, du bare får ID-kolonnen. Jeg tenkte det kunne være verdt å merke seg (selv om det ikke er).

/ Forbereder for downvote

Svarte 16/06/2011 kl. 03:53
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more