Jak rozumně seskupovat výsledky ze Selection?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
bzamecnik
Člen | 5
+
0
-

Ahoj, mám SQL dotaz v Selection, který předávám z presenteru do view. Zde se řádky výsledku zobrazí do tabulky. Rád bych řádky rozdělil podle hodnoty jednoho sloupce (např. foo) do několika skupin (řazených jinak než lexikografické pořadí hodnot foo). Buď mohu použít tolik dotazů, kolik je skupin (hodnot foo), nebo v presenteru získat seznam řádků výsledku jednihého dotazu s řazením podle hodnoty foo, ty ručně rozhodit do několika seznamů v hashmapě, do view poslat seznamy ActiveRow místo Selection a tam už si doladit pořadí skupin. Měl byste někdo tip na nějaké vhodnější řešení? Věřím, že nejsem první, kdo tohle řeší. Díky moc!

duke
Člen | 650
+
0
-

Můžeš si zkonstruovat takový SQL dotaz, který ti to setřídí, jak potřebuješ. Třídit nemusíš jen přímo lexikograficky podle foo, ale např. přes related tabulku (přes join). v Nette\Database je to takto:

$selection = $db->table('articles')->order('articlegroups.rank, articles.title');
bzamecnik
Člen | 5
+
0
-

Dík, to je zajímavé. Bohužel tam zatím používám čisté SQL, protože dotaz je trochu složitější. Ale spíš mi jde o to, jak to pak zpracovat po částech.

duke
Člen | 650
+
0
-

Tak ono v podstatě máš jen ty 2 možnosti, které jsi sám uvedl. Buď si to rozdělíš už tím rozdělením dotazů nebo si výsledek dotazu rozdělíš až následně v php. Co je lepší záleží na dalších detailech, jako je např. způsob, jak řešíš stránkování. Pokud ho řešíš celkově, je lepší 1 dotaz, pokud ho řešíš pro každou skupinu zvlášť, je lepší víc dotazů.

marek.dusek
Člen | 99
+
0
-

Jakou by melo vyhodu pouzit vice dilcich dotazu?

  • kazdy dotaz ma rezii (pripojeni, vyhodnoceni, provedeni)
  • neni snadne provadet operace „napric“ – strankovat, sortovat, omezovat apod.