Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] LEFT JOIN
Forum PHP.pl > Forum > PHP > Frameworki
miccom
Cześć.

Jeśli wykonam takie zapytanie


  1. $em = $this->getDoctrine()->getManager();
  2. $conn3 = $em->getConnection();
  3. $sql3 = '
  4. SELECT
  5. `u`.`id`, `u`.`username`, `u`.`line_int`,
  6. AVG(`g`.`line_int`) AS `avg_line`
  7. FROM
  8. `user` AS `u`
  9. LEFT JOIN
  10. `grille` AS `g` ON `u`.`id` = `g`.`user_id`
  11. WHERE
  12. `u`.`is_verified` = 1
  13. ORDER BY
  14. `u`.`line_int` DESC';
  15. $stmt3 = $conn3->prepare($sql3);
  16. $stmt3->execute();


to wyciąga mi tylko dane jednego użytkownika.. a w bazie mam dwóch spełniających te kryteria.


Jak wykonam takie zapytanie:

  1. $topGamers = $em->getRepository(User::class)
  2. ->findBy(
  3. [
  4. 'is_verified' => 1
  5. ],
  6. [
  7. 'line_int' => 'DESC'
  8. ]
  9. );


to wyciąga mi z bazy dwóch użytkowników sad.gif


Co robię źle?


Obszedłem nieco na okrągło i wyciągam dane takim zapytaniem:

  1. SELECT `u`.`id` , `u`.`username` , `u`.`line_int` , COUNT( `g`.`id` ) AS `ile`
  2. FROM `user` AS `u`
  3. LEFT JOIN `grille` AS `g` ON `u`.`id` = `g`.`user_id`
  4. WHERE `u`.`is_verified` =1
  5. GROUP BY `u`.`username`
  6. ORDER BY `u`.`line_int` DESC


a potem w twig dzielę line_int przez ile

  1. średnia na grę: <strong>{{ (sGamer.line_int /sGamer.ile)|round }}


ale mam świadomość że to niepoprawne rozwiązanie, tzn. jak cos działa to jest oki, ale chciałbym aby mysql mi to przeliczył wink.gif
nospor
Problem z pierwszym zapytaniem byl taki, ze dales funkcje grupujaca AVG, ale nie dales GROUP BY, wiec logiczne ze zwraca ci jeden rekord wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.