Portál AbcLinuxu, 13. května 2025 01:00
Řešení dotazu:
select * from tabulka where vlastnost="vlastnost1" order by hodnota desc
Pokud jsem to ovšem správně pochopil, tento dotaz z tabulky vybere řádky, které mají ve sloupci vlastnost hodnotu vlastnost1 a seřadí je sestupně podle sloupce hodnota...
Nevím sice z jakého důvodu to chcete dělat takto, ale pokud je opravdu nutné vybrat všechna data a řadit jen některá, tak bych všechna data ukládal do pole a řazení řešil na úrovni aplikace.
Ale abych navrhl nějaké konkrétní řešení, musel bych znát větší detaily, takhle vám toho moc neporadím.
Pokud nevadi
vlastnost1
ve vysledku toho selectu "nekde" (ne na zacatku)select ... from ... where ... order by vlastnost, hodnota
Dejv
uzivatel, atribut, hodnota ========================== magda, email, magda@magda.com magda, skupina, guest alojs, email, alojs@alojs.com alojs, skupina, guest breta, email, breta@breta.cz breta, skupina, adminsChci docílit podobné chování jako po order by skupina, email tzn. výsledek je
uzivatel, atribut, hodnota ========================== breta, email, breta@breta.cz breta, skupina, admins alojs, email, alojs@alojs.com alojs, skupina, guest magda, email, magda@magda.com magda, skupina, guest
skupina
ani email
. Podle příkladu dat by to tak ale mělo být, měl byste napsat SELECT, který vám vrátí
uzivatel, skupina, email ========================== breta, admins, breta@breta.cz alojs, guest, alojs@alojs.com magda, guest, magda@magda.comPak to seřadíte nnormálně pomocí
ORDER BY skupina, email
.
Muzes uvest datovy model ve forme popisu tabulek a presne napsat, co vlastne chces?Chci přesně to co jsem uvedl v tom příkladu. Pokud má uživatel1 skupiny sk1 a sk2 a uživatel2 skupiny sk2 a sk3, tak bude první uživatel1, protože má "nejmenší" skupinu.
SELECT a.* FROM tabulka a LEFT JOIN tabulka b ON (a.user = b.user AND b.vlastnost = "vlastnost") ORDER BY b.hodnota
Pokud mohou být atributy vícenásobné: tzn. není unique na tabulka(user, vlastnost), chce to ještě vyšperkovat o zajištění unikátnosti. Např. tak, že se místo joinu b udělá join na
(SELECT user, min(hodnota) FROM tabulka GROUP BY user WHERE vlastnost = "vlastnost")
Druhá možnost by byla použít window funkce a nějaké custom agregační funkce, ale to myslím mysql neumí a assi by to nebylo ani moc efektivní.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.