Doctrine 2, DQL, řadit odběratele podle počtu objednávek
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Relapse
- Člen | 34
Dobrý den,
prosím vás, mám jednoduchý vztah 1:N odběratel – objednávka.
vztah je zapsaný takto:
Subscriber entita:
/**
* @ORM\OneToMany(targetEntity="Order", mappedBy="subscriber")
*/
private $orders;
Order entita:
/**
* @ORM\ManyToOne(targetEntity="Subscriber", inversedBy="orders")
* @ORM\JoinColumn(name="subscriber_id", referencedColumnName="id")
*/
private $subscriber;
Jak se dá v DQL zapsat dotaz, který mi vrátí všechny odběratele seřazené vzestupně podle počtu objednávek?
Zkoušel jsem zatím něco podobného jako:
SELECT s, o FROM Entity\Subscriber s JOIN s.orders o ORDER BY s.orders
ale nepodařilo se.
Začínám s Doctrine.
Děkuji.
- David Matějka
- Moderator | 6445
Nesouvisi s nette.
Ale zkus:
SELECT s, SIZE(s.orders) AS HIDDEN orders FROM Entity\Subscriber s ORDER BY orders
nebo
SELECT s, SIZE(o.id) AS HIDDEN orders FROM Entity\Subscriber s JOIN s.orders o GROUP BY s.id ORDER BY orders
Od 2.5 by myslim melo fungovat pouziti te fce primo v ORDER BY bez nutnosti HIDDEN…
SELECT s FROM Entity\Subscriber s ORDER BY SIZE(s.orders)
Ale pri vetsim mnozstvi dat to muze byt neefektivni. Ja bych ulozil pocet objednavek do sloupecku u odberatele, aktualizovane treba triggerem.
- Filip Procházka
- Moderator | 4668
SELECT s, COUNT(o.id) as HIDDEN ordersCount
FROM Entity\Subscriber s
JOIN s.orders o
ORDER BY ordersCount