Autor Zpráva
forest
Profil *
Mám tabulku "matches" se sloupci:
id_match, id_h_team, id_a_team, date_match.
Řádky jsou:
1 - 1 - 2 - 11-03-2013
2 - 3 - 4 - 09-03-2013
3 - 5 - 6 - 00-00-0000

a potřebuji seřadit záznamy podle date_match sestupně, ale aby ten zápas kde je datum 00-00-0000 byl poslední.

Tudíž mi nefunguje dotaz : SELECT * FROM matches ORDER BY date_match ASC - protože ten nulový datum řadí samozřejmě první...

Díky
Joker
Profil
forest:
Princip je popsaný tady v části „Výjimky v řazení“.

Spočívá to v tom, že seřadíte na prvním místě podle podmínky, že se sloupec rovná té speciální hodnotě (ASC nebo DESC podle toho, jestli ta speciální hodnota má být poslední nebo první) a až na druhém místě podle samotného sloupce.
Tzn. ORDER BY datum='00-00-0000', datum
forest
Profil *
Díky funguje.
Jen bych se ještě rád zeptal:

ORDER BY date_match = '00-00-0000' ASC, date_match ASC - funguje jak jsem chtěl, nulové datum vypisuje poslední, ale nechápu proč u toho nulového data musím mít ASC a ne DESC? Myslel jsem, že když ho chci vypsat poslední dám tam DESC...
peta
Profil
Datum je casove razitko, ktere je kazdou sekundu (milisekund) vetsi. Novejsi datum ma tedy vetsi ciselnou hodnotu. Pokud ma byt novejsi nahore, pak je to serazeni od nejvetsiho po nejmensi, DESC.
DJ Miky
Profil
Funguje to tak, že výraz date_match = '00-00-0000' vrátí buď číslo 0 (~ false, datum nevyhovuje podmínce) nebo 1 (~ true, datum vyhovuje podmínce). Pro konkrétní data to bude vypadat takto:

date_match | date_match = '00-00-0000'
-----------+--------------------------
11-03-2013 | 0
09-03-2013 | 0
00-00-0000 | 1

Proto je nutné řadit ve vzestupném pořadí (ASC), protože nejdříve budou záznamy nevyhovující podmínce (0) a až poté záznamy vyhovující podmínce (1).

peta:
Odpovídáš na něco jiného. Mimoto datum se ukládá skutečně jen jako datum a ne timestamp. Není každou sekundu ani milisekundu větší, protože čas se vůbec neukládá.

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