Autor | Zpráva | ||
---|---|---|---|
Andrej.B Profil |
#1 · Zasláno: 3. 2. 2022, 13:45:22
Zdravim,
potrebujem zoradit vysledky dotazu na DB. Mam to zatial takto SELECT * 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 |
#2 · Zasláno: 3. 2. 2022, 15:21:09
ORDER BY auto_dodavka_stav ASC, CASE auto_dodavka_stav 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 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 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 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: 1(SELECT * (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) 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 |
#3 · Zasláno: 3. 2. 2022, 16:04:38
ale dokumentace MySQL říká, že pořadí `UNION ALL` je nedefinované:
Nepomůže toto? UNION špatně řadí jednotlivé sady výsledků |
||
Časová prodleva: 4 dny
|
|||
Andrej.B Profil |
#4 · Zasláno: 7. 2. 2022, 07:52:43
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 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 |
||
Časová prodleva: 3 roky
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0