Zadání správného příkazu do MySQL database...
Čus,
prosím o malou pomoc...
představte si tabulku, třeba se zbožím, kde každý řádek bude obsahovat několik políček (datum, název, cena, popis, vaha a dalsi)
Potřebuji seřadit tuto tabulku podle datumu a ještě aby bližší datum byl nahoře a další řádky aby datum postupně nabýval.
SELECT * FROM `db_tabulka` ORDER BY `db_tabulka`.`datum` ASC
tenhle příkaz je v pohodě, ALE...
pak tam mám pár nových řádků, které ještě datum nemají a ty bych potřeboval dát úplně nakonec tabulky....
Jenže příkazem výše uvedeným se mi napřed dají do tabulky ty bez datumu a pak teprve s datumem...
příklad:
2012-06-28, krabice xyz, 49.20 Kč , malá bílá krabička, 1.2 Kg
2012-06-29, krabice abc, 54.40 Kč , malá modrá krabička, 1.4 Kg
2012-07-01, krabice dfg, 44.20 Kč , velká bílá krabička, 1.3 Kg
(bez datumu), krabice sfdg, 34.20 Kč , velká černá krabička, 1.0 Kg (jenže tenhle řádek se mi dává jako první a já jej chci nakonec)
Napadá vás jak volat příkaz ?
Re: Zadání správného příkazu do MySQL database...
Tak myslím, že by určitě pomohlo toto (nejdřív vytahám ty co datum mají, dám je setřídit, pak k nim přilepim ten zbytek)
Kód:
SELECT * FROM `db_tabulka` ORDER BY `db_tabulka`.`datum` ASC WHERE 'datum' is not NULL
UNION ALL
SELECT * FROM `db_tabulka` WHERE 'datum' is NULL
Počítám zde s tím, že nevyplněno znamená NULL, pokud je to jinak, musel by sis to upravit.
Re: Zadání správného příkazu do MySQL database...
Ano je tam NULL, když datum není... Jdu to vyzkoušet...
Re: Zadání správného příkazu do MySQL database...
Tak tohle bohužel nefunguje....
SELECT * FROM `db_tabulka` ORDER BY `db_tabulka`.`datum` ASC WHERE `datum` is not NULL
UNION ALL
SELECT * FROM `db_tabulka` WHERE `datum` is NULL
takhle to napíše nesprávně použití WHERE
a když to Where přehodím sem:
SELECT * FROM `db_tabulka` WHERE `datum` is not NULL ORDER BY `db_tabulka`.`datum` ASC
UNION ALL
SELECT * FROM `db_tabulka` WHERE `datum` is NULL
tak první část sice funguje, ale už to zase píše nesprávné užití UNION... ach jo :)
Re: Zadání správného příkazu do MySQL database...
Nicméně přivedls, mě na myšlenku a ta funguje.... - ikdyž ji budu muset doplnit ještě pár podmínkama... nicméně i tak zatím Dík (K+ pokud to pujde)
SELECT * FROM `db_tabulka` WHERE `datum` is not NULL
UNION
SELECT * FROM `db_tabulka` WHERE `datum` is NULL
Re: Zadání správného příkazu do MySQL database...
Jo jasný, za WHERE se omlouvám, jinak jsem našel jednu fintu
Kód:
NULLs are considered lower than any non-NULL value, except if a - (minus) character is added before the column name and ASC is changed to DESC, or DESC to ASC; this minus-before-column-name feature seems undocumented.
zdroj zde: http://troels.arvin.dk/db/rdbms/#select-order_by
Takže to vypadá, že by to mělo být takhle funkční:
Kód:
SELECT * FROM `db_tabulka` ORDER BY -`db_tabulka`.`datum` DESC
Nemám tu nic na čem bych to vyzkoušel, ale našel jsem tu "minus fintu" na víc místech...
EDIT> Další možností by bylo pomocí funkce COALESCE nahradit NULL datum nějakou dostatečně velkou hodnotou...
Tedy něco jako
Kód:
SELECT * FROM `db_tabulka` ORDER BY COALESCE(`db_tabulka`.`datum`, '2050-12-31') ASC
Příkaz COALESCE nahradí při vyhodnocení klauzule ORDER BY hodnoty NULL ve sloupci DATUM nějakým dostatečně vysokým, aby se při ORDER BY (něco) ASC dostaly na konec...
Re: Zadání správného příkazu do MySQL database...
ještě než to vyzkouším chtěl jsem ti dát K+ páč už takhle mi radíš... nicméně musím dát napřed dalším než se budu moci vrátit k tobě...
A protože mi Admini ještě neodpověděli na mou položenou otázku ohledně rozdávání Karmy, tak se možná K+ ani nedočkáš (páč nemám komu bych ji jinak rozdal...)
NICMÉNĚ TEDY DÍKY alespoň takhle...
Re: Zadání správného příkazu do MySQL database...
Tak hlavně napiš, jestli něco z toho co jsem napsal funguje... COALESCE by imho mělo. Trošku jsem tápal a nenavrhl jej hned, protože já standardně v práci pracuju v T-SQL na platformě MS SQL Serveru a občas tam jsou drobný odchylky, ale nakonec jsem nabyl dojmu, že i MySQL by to mělo takhle dát. Tu "mínus fintu" jsem nikdy nepoužil, ale na víc forech to radili jako postup, tak by to mohlo být taky funkční :-)
Re: Zadání správného příkazu do MySQL database...
Tak ONO funguje jak finta s mínus tak COALESCE, jenže jako samotněj příkaz,
když chci dát pod sebe skupinu příkazů
1. napřed řádky co maj datum (order by nějak)
2. pak řádky co maj zase tohle (a ty opět třídit nějak)
3. a nakonec řádky co nemaj datum
tak napíšu-li mezi tyto příkazy UNION tak to nefachá - přesněji napsáno (mmt)
Ono těch podmínek je více, a já jsem si naivně myslel že je jednoduše spojím za sebe, jenže to nějak nejde, bo to neumim....
1. podmínka
SELECT * FROM `db_zakazky` ORDER BY -`db_zakazky`.`datumvyroby` DESC (napřed setřídit podle jednoho datumu, když datum nebude, tak druhá podmínka)
2. podmínka
SELECT * FROM `db_zakazky` ORDER BY -`db_zakazky`.`maxdatum` DESC (když není vyplněno první datum, tak třídit podle tohoto datumu, a pak teprve zobrazit vše zbylé BEZ datumu)
Re: Zadání správného příkazu do MySQL database...
Citace:
Původně odeslal
Atreides
Tak ONO funguje jak finta s mínus tak COALESCE, jenže jako samotněj příkaz,
když chci dát pod sebe skupinu příkazů
1. napřed řádky co maj datum (order by nějak)
2. pak řádky co maj zase tohle (a ty opět třídit nějak)
3. a nakonec řádky co nemaj datum
tak napíšu-li mezi tyto příkazy UNION tak to nefachá - přesněji napsáno (mmt)
Ono těch podmínek je více, a já jsem si naivně myslel že je jednoduše spojím za sebe, jenže to nějak nejde, bo to neumim....
1. podmínka
SELECT * FROM `db_zakazky` ORDER BY -`db_zakazky`.`datumvyroby` DESC (napřed setřídit podle jednoho datumu, když datum nebude, tak druhá podmínka)
2. podmínka
SELECT * FROM `db_zakazky` ORDER BY -`db_zakazky`.`maxdatum` DESC (když není vyplněno první datum, tak třídit podle tohoto datumu, a pak teprve zobrazit vše zbylé BEZ datumu)
Kód:
SELECT * FROM `db_zakazky` ORDER BY -`db_zakazky`.`datumvyroby` DESC, -`db_zakazky`.`maxdatum` DESC;