Autor Zpráva
Andrej.B
Profil
Zdravim,

potrebujem zoradit vysledky dotazu na DB.

Mam to zatial takto
SELECT *
FROM auto_dodavka_komplet
ORDER BY auto_dodavka_stav ASC, datetime_auto_dodavka ASC


T26 - 5.2.2022 - nedodane
T27 - 6.2.2022 - nedodane
T28 - 7.2.2022 - nedodane
T29 - 8.2.2022 - nedodane
T23 - 31.1.2022 - dodane
T24 - 1.2.2022 - dodane
T25 - 3.2.2022 - dodane

Je nejaka moznost mat potom tie dodane podla datetime_auto_dodavka DESC, cize vysledok by bol nejak takto?
Ciel:Zobrazi naskor tie co su nedodane a najstarsie, potom nedodane a najnovsie

T26 - 5.2.2022 - nedodane
T27 - 6.2.2022 - nedodane
T28 - 7.2.2022 - nedodane
T29 - 8.2.2022 - nedodane
T25 - 3.2.2022 - dodane
T24 - 1.2.2022 - dodane
T23 - 31.1.2022 - dodane
juriad
Profil
ORDER BY auto_dodavka_stav ASC, CASE auto_dodavka_stav 
    WHEN 'nedodane' THEN UNIX_TIMESTAMP(datetime_auto_dodavka) 
    ELSE -UNIX_TIMESTAMP(datetime_auto_dodavka) END ASC
Idea je převést datum na číslo, a pak v jednom případě číslo negovat.

ORDER BY CASE WHEN auto_dodavka_stav = 'nedodane' THEN datetime_auto_dodavka ELSE '9999-12-31 23:59:59' END ASC, datetime_auto_dodavka DESC
Podobný případ. Pro nedodané použijeme přesně datetime_auto_dodavka; dodané budou na konci seřazené jako by byly v roce 9999. Pak řidáme druhé řadící kritérum, které se projeví jen těch se stejným datumem, což jsou jen ty dodané - a ty seřadíme sestupně.

Ale bude to pomalé, pokud máš hodně dat - bude se volat funkce pro každý řádek.

Možná ti bude fungovat UNION ALL:
(SELECT *
FROM auto_dodavka_komplet
WHERE auto_dodavka_stav = 'nedodane'
ORDER BY datetime_auto_dodavka ASC)
UNION ALL
(SELECT *
FROM auto_dodavka_komplet
WHERE auto_dodavka_stav = 'dodane'
ORDER BY datetime_auto_dodavka ASC)
ale dokumentace MySQL říká, že pořadí `UNION ALL` je nedefinované:
Use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows.
Takže bych na to nedoporučoval spoléhat.

Asi bude jednodušší použít dva dotazy.
Kcko
Profil
ale dokumentace MySQL říká, že pořadí `UNION ALL` je nedefinované:
Nepomůže toto? UNION špatně řadí jednotlivé sady výsledků
Andrej.B
Profil
juriad:

ORDER BY CASE WHEN auto_dodavka_stav = 'nedodane' THEN datetime_auto_dodavka ELSE '9999-12-31 23:59:59' END ASC, datetime_auto_dodavka DESC

na prvy sup. Ratal som, ze to bude jednoduchsie, ze mi len nieco unika. Toto by som sam nedal, dakujem

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