Symfony - SQL i DQL generuje inne wyniki

0

Siema.

Mam 2 tabele: objects i object_votes. Moim zadaniem jest uzyskać ID-ki top dziesięciu obiektów na podstawie ilości głosów (coś ala ranking).

Mam dziwny problem. Otóż, na podstawie zapytania SQL konstruuję zapytanie przez QueryBuilder w Symfony i teraz tak:

  • zapytanie "macierzyste", a także to wygenerowane przeze mnie w kodzie (dumpowane poprzez getDQL()) wydaje się dawać podobny rezultat... ale tylko teoretycznie.
  • gdy przechodzi do praktyki, oba zapytania dają, lekko różniące się, wyniki.

[SQL]

SELECT o.objectID, COUNT( ov.object_voteID ) AS votes_count
FROM objects AS o 
JOIN object_votes AS ov  ON o.objectID=ov.objectID
WHERE ov.object_vote_value = 1
GROUP BY o.objectID 
ORDER BY COUNT( ov.object_voteID ) DESC 
LIMIT 0, 10

;

[output]

+----------+-------------+
| objectID | votes_count |
+----------+-------------+
|       23 |          22 |
|        3 |          13 |
|       24 |           5 |
|       13 |           3 |
|        4 |           3 |
|        8 |           3 |
|       11 |           2 |
|       27 |           2 |
|       26 |           2 |
|       30 |           1 |
+----------+-------------+
10 rows in set (0.10 sec)

Tutaj zapytanie zwróciło TO CO POWINNO.

[DQL]

SELECT o, COUNT(ov.voteID) AS votes_count
FROM AppBundle\Entity\Object o
INNER JOIN AppBundle:ObjectVote ov 
WHERE ov.value = :value 
GROUP BY o.ID 
ORDER BY votes_count DESC

zwraca mi coś w stylu:

+----------+-------------+
| objectID | votes_count |
+----------+-------------+
|       29 |          64 |
|        2 |          64 |
|       39 |          64 |
|       12 |          64 |
|        22 |          64 |
|        32 |          64 |
|       5 |          64 |
|       42 |          64 |
|       15 |          64 |
|      25  |          64 |
+----------+-------------+

I nie mam pojęcia co to za cholerne 64, jak analizuję tabelę z głosami, to za Chiny mi nie wychodzi 64.

Podaję kod generowania zapytania DQL:

$qb = $this->createQueryBuilder('o')
        ->addSelect('COUNT(ov.voteID) AS votes_count')
        ->join('AppBundle:ObjectVote', 'ov') //
        ->where('ov.value = :value')
        ->groupBy('o.ID') // 
        ->orderBy('votes_count', 'DESC')
        // set parameter
        ->setParameter('value', 1)
        ;

$q = $qb->getQuery()->setMaxResults(10);

//        $dql = $q->getDQL();
//        exit(\Doctrine\Common\Util\Debug::dump($dql));

$objects = $q->getResult();

**
Poratujcie swoimi bystrymi oczętami i zobaczcie gdzie mógłby leżeć błąd. Będę wdzięczny, to pierwszy raz, gdy korzystam z DQL-a :)**

0

Nie brakuje Ci warunku w joinie?
Tak to wygląda w zapytaniu oraz wynikach.

1

Sprawdź jak masz zdefiniowane relacje między encjami Object i ObjectVotes - podejrzewam, że to tam może leżeć problem. Samo zapytanie z QB wygląda ok.

[Adam]

1 użytkowników online, w tym zalogowanych: 0, gości: 1