Ako na order() pri group()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
JakubTN
Bronze Partner | 49
+
0
-

Zdravim,

vedel by mi niekto poradit, ako dosiahnut vratenie dat zoradenych podla order(), ked zaroven pouzijem aj group()?

Priklad:

Mam tabulku s privatnymi spravami, pricom potrebujem vypisat skupiny sprav s jednotlivymi uzivatelmi a zaroven vzdy zobrazit aj nahlad poslednej spravy.

Ked pouzijem:

<?php
$this->context->createMessageUser()->where('webuser_id', $user->id)->order('datetime DESC')->group('adminuser_id');
?>

tak po vypisani v sablone pre kazdu skupinu sprav s danym uzivatelom dostavam len prvy zaznam, pricom by som potreboval posledny.

Existuje nejake elegantne riesenie? Dakujem.

Editoval JakubTN (30. 6. 2012 21:23)

petr.pavel
Člen | 535
+
0
-

Tohle se netýká Nette ani Nette Database – máš zmatek v tom, jak se používá GROUP BY/ORDER BY v SQL.
ORDER BY řadí výsledné (seskupené) věty, nikoliv záznamy v rámci skupiny. To, že dostáváš první záznam, je náhoda. Jindy bys taky mohl dostat jiný. To je vůbec taková zvláštnost MySQL, že povoluje žádat o hodnotu, která není jasně určena. Třeba PostgreSQL ti nepovolí v SELECT uvést proměnnou, která není použita v agregační funkci nebo v GROUP BY.

Výběr prvního prvku v rámci skupiny se popisuje zde, není to trivča.

JakubTN
Bronze Partner | 49
+
0
-

Jasne ja som prave hladal rozne riesenia, dokonca aj ten clanok, ktory si uviedol som videl.

Len som tak nejak tajne dufal, ze je to mozno nejak jednoducho vymyslene priamo v Nette Database :)