Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF][Symfony][SF3] SubQuery w LeftJoin
Lirdoner
post 22.07.2017, 12:56:04
Post #1





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

Ostrzeżenie: (0%)
-----


Cześć, mam takie zapytanie które muszę wywołać w symfony3:
  1. SELECT c.*, cr.rate_date, cr.rate
  2. FROM currency c
  3. LEFT JOIN currency_rate cr ON cr.id = (SELECT MIN(cr2.id) FROM currency_rate cr2 WHERE cr2.currency_id = c.id)


Niestety nie umiem poradzić sobię z subQuery. Mam coś takiego:
  1. $subQuery = $em->getRepository('AppBundle:CurrencyRate')->createQueryBuilder('cr2')
  2. ->select('MIN(cr2.id)')
  3. ->where('cr2.currency_id = c0_.id');
  4.  
  5. $currencies = $em->getRepository('AppBundle:Currency')->createQueryBuilder('c')
  6. ->leftJoin('AppBundle\Entity\CurrencyRate', 'cr', 'with', 'cr.id = :subQuery')->addSelect('cr.rateDate, cr.rate')
  7. ->setParameter(':subQuery', $subQuery->getDQL())
  8. ->getQuery()->getResult();

ale zapytanie które się tworzy to:
  1. SELECT c0_.id AS id_0, c0_.code AS code_1, c0_.active AS active_2, c0_.main AS main_3, c1_.rate_date AS rate_date_4, c1_.rate AS rate_5 FROM currency c0_ LEFT JOIN currency_rate c1_ ON (c1_.id = 'SELECT MIN(cr2.id) FROM AppBundle\\Entity\\CurrencyRate cr2 WHERE cr2.currency_id = c0_.id');

Czyli całe to subQuery jest traktowane jako string. Szukałem odpowiedzi w Google ale żadne rozwiązanie nie zadziałało :/
Go to the top of the page
+Quote Post
nospor
post 22.07.2017, 13:00:37
Post #2





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




No skoro subquery bindujesz jak normalny tekst to masz co masz...

Tak to powinno byc:
https://stackoverflow.com/questions/1076258...763358#10763358


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Lirdoner
post 22.07.2017, 13:37:59
Post #3





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

Ostrzeżenie: (0%)
-----


Okej, tylko, że tutaj jest to robione na where. Moje subQuery jest częścią leftJoin

//edit
Dobra, mam to. Jednak czy istnieje jakaś inna opcja niż wykorzystanie IN?

Ten post edytował Lirdoner 22.07.2017, 13:41:36
Go to the top of the page
+Quote Post
nospor
post 22.07.2017, 14:12:40
Post #4





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




1) A co za roznica IN czy = gdy i tak zwracasz tylko jeden rekord w subquery?
2) Poza tym IN to tylko przyklad. Przeciez EXPR posiada rowniez equal czy jakos tak


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 13:49