Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z limitem w Doctrine2 w zapytanie które używa JOIN
michael1986
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.09.2005

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


Witam

Mam zapytanie takie:

  1.  
  2. $dql = "SELECT p, c FROM Entities\Product p LEFT JOIN p.ceny c";
  3.  
  4. $query = $em->createQuery($dql);
  5. $query->setMaxResults(2000);
  6.  


w jednym produkcie mam od 0 do 10 cen, jeśli dam limit to nie mam stałej liczby wyników na stronie nie mogę więc zrobić stronicowania, bo on daje bezpośrednio limit po zapytaniu SQL nie załapując tego że chodzi mi o 2000 pierwszych produktów a nie o 2000 pierwszych połączonych produkto-cen.


Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. SELECT p.id FROM product p INNER JOIN ... INNER JOIN ... WHERE p.category_id = :cid AND ... AND ... GROUP BY ... ORDER BY ... LIMIT ... OFFSET ...;
  1. SELECT p.id, p.name, pr.price, pr.GROUP ... FROM product p INNER JOIN ... INNER JOIN ... WHERE p.id IN (:lista_id_z_wcześniejszego_zapytania) GROUP BY ... ORDER BY ...
To jest ogólny mechanizm pobierania danych w takim przypadku, korzystając z Doctrine wygląda to z grubsza tak samo.

Przy czym istnieją narzędzia, które automatyzują ten proces (np. odpowiedni adapter dla Zend/Paginatora), gdzie jedyne co musisz zrobić to przekazać Doctrine'owskie zapytanie (obiekt Doctrine\ORM\Query), a one wygenerują pierwsze i odpowiednio zmodyfikują drugie po czym je wykonają.
Go to the top of the page
+Quote Post
michael1986
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.09.2005

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


Cytat(Crozin @ 10.01.2012, 23:10:30 ) *
  1. SELECT p.id FROM product p INNER JOIN ... INNER JOIN ... WHERE p.category_id = :cid AND ... AND ... GROUP BY ... ORDER BY ... LIMIT ... OFFSET ...;
  1. SELECT p.id, p.name, pr.price, pr.GROUP ... FROM product p INNER JOIN ... INNER JOIN ... WHERE p.id IN (:lista_id_z_wcześniejszego_zapytania) GROUP BY ... ORDER BY ...
To jest ogólny mechanizm pobierania danych w takim przypadku, korzystając z Doctrine wygląda to z grubsza tak samo.

Przy czym istnieją narzędzia, które automatyzują ten proces (np. odpowiedni adapter dla Zend/Paginatora), gdzie jedyne co musisz zrobić to przekazać Doctrine'owskie zapytanie (obiekt Doctrine\ORM\Query), a one wygenerują pierwsze i odpowiednio zmodyfikują drugie po czym je wykonają.



tylko jak tą listę ID z poprzedniego zapytania przekazaćdo następego? czy zmienną mysql czy przez php? wydaje mi się że przez PHP to się "zmuli"
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 01:31