Fórum Root.cz
Hlavní témata => Sítě => Téma založeno: Wangarad 28. 05. 2019, 11:49:47
-
Dobry den.
Mam otazku ci je mozne len pomocov SQL select fitrovat unikatne ID.
Priklad :
$bests_user = User::where('status', User::STATUS_COMPLETED)
->with('account.user', 'money')
->where('cash','>','1500')
->orderBy('cash', 'desc')
->limit(5)
->get();
co mi vracia tabulku v style
1 - Janko - 2000
2 - Janko - 1980
3- Fero - 1765
4- Miso - 1587
5 - Janko - 1512
Je mozne upravit SQL tak aby mi to vzdy vracalo account len raz a len s navysov hodnotov? Teda
1- Janko - 2000
2 - Fero - 1765
3- Miso - 1587
4- Karol - 1555
5- Peter - 1531
?
-
treba pouzit group by a funciu MAX().
nieco ako:
select user, max(money)
from tabula
where cash > 1500
group by user
-
treba pouzit group by a funciu MAX().
Daleko správnější by bylo použít "DISTINCT ON (user)" a ORDER BY cash DESC.
Použití agregátu max() by fungovalo pouze ve speciálním případě, kdy by i ostatní sloupce byly stejné. DISTINCT ON () je univerzální řešení.
-
Bohuzial v laravel ani jedno nesplnilo funkciu :(
-
Bohuzial v laravel ani jedno nesplnilo funkciu :(
Pak Váš dotaz není na SQL, ale na něco úplně jiného.
-
treba pouzit group by a funciu MAX().
Daleko správnější by bylo použít "DISTINCT ON (user)" a ORDER BY cash DESC.
Použití agregátu max() by fungovalo pouze ve speciálním případě, kdy by i ostatní sloupce byly stejné. DISTINCT ON () je univerzální řešení.
nikde neni receno ze je to postgresql a v zadnem jinem 'slusnem' sql serveru jsem nevidel tuto syntaxi a urcite neni univerzalni a ani nejrychlejsi :)
-
nikde neni receno ze je to postgresql a v zadnem jinem 'slusnem' sql serveru jsem nevidel tuto syntaxi a urcite neni univerzalni a ani nejrychlejsi :)
O rychlost nejde, ale na položený dotaz není správná odpověď max() a GROUP BY, protože to dá správné výsledky jen za konkrétní situace - všechny ostatní sloupce vyjma částky budou totožné. Ale tento předpoklad nebyl položen.
V případě MySQL se to musí řešit subselectem, kdy vnitřní select vytáhne příslušný řádek pro danou osobu a vnější select se postará o setřídění výsledků.
-
subselect ! To je to co som hladal.
Dakujem pekne. Laravel a subselect su kamarati.
Mozte to uzavriet