Autor Zpráva
alibagil
Profil
Potřeboval bych z tabulky vytáhnout záznamy a seřadit je podle data vložení, od nejnovějších, pokud nemají nastavenou prioritu (null), pokud ano, záznamy s prioritou > 0 budou vždy první. Je nějaká možnost, jak to udělat přímo v mysql dotazu?

příklad řazení:

id datum priorita
1 11.5.2016 1
2 12.5.2016 2
3 13.5.2016 null
4 12.5.2016 null
juriad
Profil
select *
from udalosti
order by priorita > 0 DESC, datum DESC
Výsledkem porovnání priorita > 0 je true/false/null, to se převede na číslo 1/0/null, které se seřadí sestupně.

sqlfiddle.com/#!9/21cb8c/1
TomášK
Profil
ORDER by priorita IS NULL DESC, priorita, datum DESC. Možná mám prohozené ASC/DESC, to už si předpokládám doladíš.
alibagil
Profil
Díky za reakci. Bohužel toto nefunguje, resp. ne úplně. Sice to správně zařadí záznamy s prioritou > 0 na první místa, ale zde jsou již dále řazeny podle data vložení, výsledek teď vypadá takto:

id datum priorita
1 12.5.2016 2
2 11.5.2016 1
3 13.5.2016 null
4 12.5.2016 null

Potřebuji, aby byly první dva záznamy opačně, tedy podle priority 1,2 atd.


TomášK:

Díky moc, to je přesně ono!
alibagil
Profil
Tak přece jen ještě jedna věc. Bylo by možné, aby to pracovalo s hodnotou 0 a ne jen s null? Jde mi o to, že pokud prioritu změním např. z 2 na 0, tak se položka zařadí na první místo. Chtěl bych, aby se přepisem na 0 priorita jakoby vymazala a položka se řadila opět pouze podle data vložení.
juriad
Profil
ORDER BY (priorita IS NULL OR priorita = 0) ASC, priorita ASC, datum DESC

Proč vůbec umožňuješ prioritu, která je NULL? Je snad problém vyplnit jako výchozí hodnotu 0? Navíc by sedělo, že vyšší priorita = víc nahoře. Pak by dokonce stačilo:
ORDER BY priorita DESC, datum DESC
alibagil
Profil
juriad:

Díky, díky, teď je to perfektní. Ona to vlastně není priorita, ale pořadí, stejný princip, jen opačný, čím nižší číslo (kromě nuly) tím výše v pořadí.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0