Zadejte hledaný výraz...

řazení dat cik cak

duben
verified
rating uzivatele
(49 hodnocení)
6. 11. 2011 13:11:27
mnosavcov
Míň machrování a víc sebereflexe, když po někom něco chceš a neumíš se ani správně zeptat by neškodilo. Nemělo cenu abych psal jinou než veselou poznámku, protože ostatní předemnou ti už jasně napsali, že zadání bylo nedostatečné. Po tom co jsi tu rozepsal, je jasné, že jsi ve skutečnosti chtěl něco naprosto jiného než vyplývalo z tvého první dotazu. Nehledě na to, že zadání jsi napsal špatně (ostrava je abecedně před prahou) a že si mě jízlivě dobíráš a čekáš zdarma radu na ne zrovna triviální otázku, ti jako "trouba s hromadou znalostí" pomůžu. Nezadal jsi v rámci své euforii o tom jak jsem "vtipný a machruju" nad jakou databází má SQL kód běžet. Tohle jde řešit pomocí rozšiřujících SQL funkcí, které má každý sql interpret (MySQL, SQL, PSQL) jiné. V řešení tedy vycházím z toho, že používáš mezi webtržníky nejběžnější MySQL.
1) triviální řešení neexistuje, protože cikcak řazení neodpovídá logice množinovému zpracování dat (případný tip ke studiu, relace a množinové operace)
2) nevím proč to takhle potřebuješ, ale řešení v kódu je většinou praktičtější
3) vhodné řešení na úrovni databáze je pomocí triggerů, při ukládání dat na INSERT TRIGGERU
4) funkční řešení existuje a je popsáno níže
Aby ses mohl ty nebo kdokoliv jiný, kdo se bude chtít něco přiučit mohl kód vyzkoušet rovnou přikládám ostatní potřebné scripty:
Script na vytvoření testovací tabulky
vložení testovacích dat
SQL kód, který dělá to co chceš, vzhledem k tomu, že chceš něco co normálně udělat nejde, má to řešení určité omezení. Tohle řešení bude fungovat pouze do 10ti měst, pokud to budeš chtít rozšířit o řád, je potřeba v kódu změnit výskyt kus kódu kde je
místo na 10 na 100x, o další řád 1000x atd. Bohužel MySQL neumí v rankovací funkci násobení. Pro hezčí řešení je udělat variable tabulku, nebo stálou pomocnou tabulku, do ní vložit 1, 10, 100 atd... a to JOINovat a přičítat. Případně nejprve zjistit počet měst a podle toho použít generátor SQL kódu, který opakování zajistí, nebo použije vhodně proměnou. Nicméně to už je jen způsob jak udělat řešení o něco hezčí, na funkčnost vliv nemá.
A teď finální kód
Když budeš chtít vtipnějšímu přispěvovateli poděkovat za asi 2 hodiny práce, tak na http://www.duben.org najdeš můj paypal účet, jinak je tu plus u příspěvku.
6. 11. 2011 13:11:27
https://webtrh.cz/diskuse/razeni-dat-cik-cak/strana/2#reply665307
Michal Nosavcov
verified
rating uzivatele
(1 hodnocení)
20. 11. 2011 21:18:40
ahoj, omlouvám se :)
v ten den kdy jsem to četl mi to nějak nesedlo a trochu jsem se rozjel. No v každym případě klobouk dolu, že sis s tim dal tolik práce. Snad to tady někdo najde a bude mu tahle informace užitečná. Jinak já to nakonec vyřešil už dřív lehce primitivně a to že jsem na konec dotazu připojil --- order by rand() --- takže je to přeházené a dá se to stránkovat, nakonec jsme se dohodli že to nemusí být pravidelné
M
20. 11. 2011 21:18:40
https://webtrh.cz/diskuse/razeni-dat-cik-cak/strana/2#reply665306
Pro odpověď se přihlašte.
Přihlásit