Autor | Zpráva | ||
---|---|---|---|
Hitman Profil |
Dobrý den,
chtěl bych se zeptat na takovou drobnost, nikde se mi ji nepodařilo najít: Potřebuji klasický dotaz z řazením: SELECT xxx FROM....ORDER BY nazev ASC A potřebuji přidat upřednostnění pro položky které mají třeba příznak priorita 1. Čili něco jako: SELECT xxx FROM....LEFT JOIN priznaky ORDER BY (WHERE priznaky.priorita = 1 - mimo jiné, tohle ID může mít v tabulce příznaků zároveň priorita = 5 atd., mě zajímá jestli má 1 nebo ne), nazev ASC (jedná se o tabulku příznaků přes JOIN, takže jedno ID může mít priorita = 1, priorita = 8 atd., ale já chci upřednostnit ty s 1). |
||
juriad Profil |
SELECT xxx FROM....ORDER BY (priorita = 1) DESC, nazev ASC Aneb v ORDER BY může být jakýkoli výraz včetně porovnání. Rovnost vrací jedničku, nerovnost vrací nulu, a ty nejspíš chceš zobrazit rovnost před nerovností. |
||
Hitman Profil |
A je možné ostatní parametry vyřadit z vyhledávání?
Takto mi to totiž seřadí jak píšeš pokud je podmínka splněna 1, ale tu 0 už bych nechtěl zohleňovat. Chci mít první záznamy které mají priorita = 1 a poté řadit dle názvu. Takto mi to ale seřadí dle toho zda tam 1 je nebo není a potom podle názvu. Protože některé záznamy v tabulce priority nemají a tak ono to vybere nejdříve ty které je mají (a mají tak podmínku 0 nebo 1) a poté až bere ostatní. Nevím jestli to jde pochopit raději ještě na příkladu: Tabulka seznam: id_zaznamu nazev 1 pepa 2 jarda 3 jirka 4 zdeněk Tabulka priority: id_zaznamu priorita 2 (jarda) 1 3 (jirka) 6 3 (jirka) 1 4 (zdeněk) 4 Takže by to mělo vypsat nejdříve ty kteří mají prioritu 1: jarda, jirka A poté dle názvu ostatní: pepa, zdeněk Ale vypíše to ty s prioritou 1: jarda, jirka Ty s podmínkou o prioritě 0 (kteří jsou v tabulce, ale nemají 1): zdeněk A potom ostatní: pepa Správné pořadí: jarda, jirka, pepa, zdeněk Pořadí při souč. řešení: jarda, jirka, zdeněk, pepa |
||
juriad Profil |
#4 · Zasláno: 14. 6. 2016, 19:33:57
Hitman:
Ukaž celý dotaz, ono to zavání nějakým LEFT JOINem a GROUP BY |
||
TomášK Profil |
#5 · Zasláno: 14. 6. 2016, 19:37:27
Co
ORDER BY (IFNULL(priorita, 0) = 1) DESC ? Nezkoušel jsem.
|
||
Hitman Profil |
#6 · Zasláno: 14. 6. 2016, 19:41:52
TomášK:
Supr, vypadá to že to funguje. juriad: Je to hrozně dlouhej nepřehlednej dotaz z různýma proměnnýma a objekty (předělávka něčí práce).. Každopádně díky moc kluci :-) |
||
juriad Profil |
#7 · Zasláno: 14. 6. 2016, 19:41:55
SELECT s.nazev FROM seznam s LEFT JOIN priorita p ON s.id_zaznamu = p.id_zaznamu AND p.priorita = 1 ORDER BY p.priorita = 1 DESC, s.nazev ASC Mně tento dotaz funguje. sqlfiddle.com/#!9/6eb57a/1 |
||
Hitman Profil |
Tak řešení juriada funguje dobře, u TomášeK je problém s tím že pokud je v tabulce předchozí záznam s jinou prioritou, vyhodnotí se ten a dále už se nehledá.
U juriada mi chybělo "AND p.priorita = 1"... // Řešení Keeehiho funguje také dobře (i bez toho AND...), díky :-) |
||
Keeehi Profil |
#9 · Zasláno: 14. 6. 2016, 23:16:12
Hitman:
To že to záleží na pořadí bude důsledek těch joinů. Kdyby jsi ukázal ten dotaz celý, jak psal juriad, tak bychom věděli určitě. Takhle mohu tipovat, že chceš použít funkci min. Asi ORDER BY (IFNULL(MIN(PR.`priorita`), 0) = 1) DESC, (JM.`nazev`) |
||
Časová prodleva: 8 let
|
0