Autor Zpráva
freeTel
Profil *
Zdravím, mám dotaz co mi funguje nadmíru skvěle a je důležité to volat druhým dotazem. Jediné co mi tam nejde dosadit je posloupnost, kterou jsem zkoušel a bez výsledku. Dotazu mi to neseřadí a když to dám mimo závorky, tak je chyba. Jde nějak docílit řazení nebo by se musel zmenit celkově dotaz? Děkuji

us.id IN(SELECT ob.id_user FROM objednavky ob ORDER BY (ob.stav='N') DESC,ob.stav ASC)
blaaablaaa
Profil
freeTel:
Ono to seřadí, ale v rámci poddotazu, kde je to zbytečné. Proč je to řešeno poddotazem a ne spojením tabulek?
freeTel
Profil *
Je to kvůli podmince na tabulky doručovacího města. Jinak to být bohužel nemůže.
freeTel
Profil *
Upravil jsem to a logika mi říkala, že po refresh to bude dělat co chci a ouvej. Nedělá :-)
us.id IN(SELECT ob.id_user FROM objednavky ob ORDER BY (ob.stav='N') DESC,ob.stav ASC) ORDER BY us.id DESC
Kajman
Profil
Asi nechápete základy sql, že cpete order by do míst, kde nemůže mít žádný vliv a ještě pak nějaký vliv čekáte.
freeTel
Profil *
Kajman:
Zkouším se logicky dopracovat k výsledku


Už jsem to vyřešil, tak děkuji za Váš čas
Kajman
Profil
Řazení ovlivníte ORDER BY klauzulí hlavního dotazu. Osobně bych si joinul zgroupovaná data z tabulky objednavky, aby bylo podle čeho řadit. Šlo by asi využít i korelovaný poddotaz v order by části, ale rychlost asi nebude valná (pokud se tedy uživatelé nějak výrazně nefiltrují v části dotazu, kterou jste neposlal).
freeTel
Profil *
Filtrují. Proto to řeším takhle blbě, ale vyřešil jsem to:
1. dotaz jen na tabulku, kterou chci řadit a vytáhnul jsem si už seřazená data
2. do dotazu, který mi už vrací výsledky jsem dal ORDER BY field a tím jsem vše vyřešil.


Není to moc elegantní cesta, ale jediná možná
Kajman
Profil
freeTel:
ale jediná možná

O tom silně pochybuji. Ale klidně si to ne tak nechte, je to Vaše vizitka.
freeTel
Profil *
Jaké jsou další možnosti?
freeTel
Profil *
Jaké jsou další možnosti?


Jedná se mi seřadit dotaz, který jste mi pomohl/dal dohromady: Dvě tabulky z dotazem na město
Kajman
Profil
freeTel:
Jaké jsou další možnosti?
Přečtěte si znovu [#7]

V tom ukázkovém schématu bych čekal tabulku s číselníkem stavů objednávky. Tam bych si dal sloupec priorit, jak se mají stavy řadit. Jeden uživatel může mít více objednávek s různými stavy, tak se může třeba říci, že se řadí podle nejmenší priority ze všech jeho zakázek.

Je tam nástřel varianty s joinem i s korelovaným poddotazem. Ověřte si na datech odpovídajících skutečnému nasazení, která varianta bude rychlejší (pro testy si nezapomeňte zakázat sql cache).
sqlfiddle.com/#!9/93aa77/5

edit: v druhém dotazu zbyl nepotřebný join při kopírování
sqlfiddle.com/#!9/93aa77/7
freeTel
Profil *
Kajman:
Ten dotaz je hrozně dlouhý a je tam mnoho dotazů + tabulka navíc. Moje řešení sice je hamba, ale funkční a s měně zatěžuje server. Věřím, že Vaše řešení je profesionálnější, ale mnohem náročnější na server a v podstatě mi nenabídne uživatele co má u objednávky stav N jako prvního. Upřímně jsem to ani netestoval. Vážím si Vaší pomoci a času, který jste na to vynaložil a nechci aby to vyznělo nevděčně, ale je to jen můj názor na danou věc.


Kajman:
Jsem se na to podíval pořádně a ta další tabulka určuje prioritu řazení. Je to zajímavé.
Tomášeek
Profil
freeTel:
Moje řešení ... měně zatěžuje server.
Jsi si tím jistý? Máš to změřené?

Upřímně jsem to ani netestoval.
Hm, myslím, že tady je to házení perel sviním. Proč se tedy ptáš, když řešení dodané na zlatém podnosu ani nevyzkoušíš?

Good luck s tímto přístupem. Doufám, že si to uvědomí napříště i Kajman, že je to s tebou ztráta času...
freeTel
Profil *
Tomášeek:
byl jsem unavený z práce a řešení jsem použil a chtěl jsem poděkovat. Jen jsem psal svůj pohled, který jsem přehodnotil a jestli dovolíte, tak si vyhrazuji v životě mít svůj názor. Jste hodný pokud mi to dovolíte :-)

Nejsem tady pro hádky ani urážky, tak pro příště si své přirovnání nechte.


Kajman:
Opět moc děkuji a chci se zároveň omluvit. Ano, nejen, že je Váš dotaz profesionálnější, ale i přehlednější v kodu. Děkuji

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