Zadejte hledaný výraz...

Konsekutivne radenie – validacia

node
verified
rating uzivatele
(5 hodnocení)
24. 12. 2018 16:54:52
Mam tabulku kde mam integer stlpec ktory je unique a vkladam do nej zaznamy kde potrebujem zaistit to ze nevlozim zaznam ktory by preskocil ciselny rad(cize 1,2,3 -> 5..)
Prakticky vzate - ak mam v tabulke zaznamy 1, 2, 3 tak nemozem vlozit 5,6,7 ale musi tam byt 4. Samozrejme vlozit 5, 4 ,6 mozem lebo v konencom dosledku dosiahnem 1,2,3,4,5,6.
Prakticky tie ID pochadzaju z inej DB a ja musim zachovat postupnost, to je cele.
Zaujimalo by ma ci je mozne toto zaistit nejakym matematickym vzorcom, idelane aplikovatelnym priamo na db(sql)?
Nieco ako ze si spocitam vsetky idcka(1+2+3+4+5=15) a nejakym vzorcom si z toho vypocitam ci mi tam chyba nejake cislo alebo nie.
Zatial robim len primitivnu kontrolu, mimo inych, if (total > 1 && (max - min) != (total-1)) exit ale prakticky by som musel robit loop a kontrolovat sekvenciu manualne, co sa da v aplikacii ale chcel by som aj nieco na db.
24. 12. 2018 16:54:52
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380790
Píšeš, že ty identifikátory pocházejí z externího zdroje, a že je ti jedno, v jakém pořadí se zapíší.
Proč tedy prostě ta data nevkládat v pořadí, v jakém přicházejí, a při čtení je neseřadit?
ORDER BY external_id ASC
Co je to za externí zdroj? Co budeš dělat, až pošle data mimo pořadí? Tvé aktuální řešení se při první chybě (5, 4, 6) navždy zasekne.
24. 12. 2018 23:07:20
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380789
node
verified
rating uzivatele
(5 hodnocení)
24. 12. 2018 23:40:56
Zle si pochopil. Nejde mi o radenie zapisu ale o to aby sa nestalo ze mi bude chybat nejaka sekvencia(1,2,3,5,6,9). Inak povedane, nie je mozne do db zapisat riadok bez toho aby uz v db existoval iny riadok s id-1. Skratka ak chcem zapisat riadok s ID 5 tak v db uz musi byt riadok s ID 4, ak chcem zapisat ID 25698 tak v db uz musi byt 25697.
24. 12. 2018 23:40:56
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380788
Bogdan
verified
rating uzivatele
(1 hodnocení)
25. 12. 2018 00:45:37
Možná špatně, ale nešlo by zajistit hodnotu posledního ID. A potom změnit autoincrement u toho id na posledni id + 1? Pokud teda to ID je generovano automaticky.
25. 12. 2018 00:45:37
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380787
Bogdan
verified
rating uzivatele
(1 hodnocení)
25. 12. 2018 00:54:22
//Jsem asi de*il který to nepochopil.
Ale není na tohle AUTO_INCREMENT?
25. 12. 2018 00:54:22
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380786
martinzsa
verified
rating uzivatele
(1 hodnocení)
25. 12. 2018 01:42:51
Napsal Bogdan;1503045
//Jsem asi de*il který to nepochopil.
Ale není na tohle AUTO_INCREMENT?
to sme asi debili dvaja kedze autoimcrement mi tiez napadol ako prve...
ale ak ide autorovi o to ze ma na vstupe uz nejake id ktore chce vkladat tak to potom Node sprav tak ze si vytvoris storovanu procedúru do ktorje ako parametre das id a zvysne stlpce a v ramci procky si spravis select na id-1 a ak take id existuje tak commit a return true, inak false.
otazka este je ako chces aby sa to spravalo ak uz take id v DB mas...
25. 12. 2018 01:42:51
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380785
crs
verified
rating uzivatele
(1 hodnocení)
25. 12. 2018 20:06:51
Rád bych poradil, ale nerozumím.
Máš tabulku, s unikátním celočíselným sloupcem (řekněme id), a současně nechceš používat auto_increment, a v té tabulce mohou být "díry" (např. po smazaných záznamech) a potřebuješ najít nejmenší id, které chybí?
How do I find a "gap" in running counter with SQL? - Stack Overflow
25. 12. 2018 20:06:51
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380784
node
verified
rating uzivatele
(5 hodnocení)
25. 12. 2018 22:43:39
posledny pokus o vysvetlenie, lebo som to po sebe cital niekolko krat a inak to uz vysvetlit naozaj nejde.
takze v principe ide o to ze nemozem urobit insert do tabulky v pripade ze by som chcel vlozit data ktore po vlozeni nemaju kontinualny ciselny rad. skratka append-only. ak prebehne pokus o insert dat ktore nenadvezuju priamo na uz existujuce data tak musi transakcia fejlnut.
v praxi ide o to ze mam N databaz ktore su SPOT. Kazda z nich reprezentuje unikatny namespace ale strukturou su data totozne. Samozrejme si kazda radi data cez auto-increment. Ja potrebujem agregrovat data zo vsetkych tychto databaz kvoli tomu ze potrebujem odbremenit tie db a mat centralnu db ktora sa bude skalovat a bude urcena na citanie. a tym ze v tejto centralnej db nemozem pouzit auto-increment, ale musim 100% zarucit poradie zaznamov, tak musim riesit to aby som nevlozil data mimo poradia a tym padom som podal prakticky invalidne data konzumentom. ak producent ma napriklad 100 zaznamov a mne pride 1-50 a potom znovu 1-50 tak mam stale len tych unikatnych zoradenych 1-50. ak mi producent posle zaznamy 75 az 100 tak to ignorujem lebo mi chyba 51 az 74, takze aj ked producent uz ma 100 zaznamov, ja mozem naservirovat konzumentom len zaznamy 1-50.
tl;dr kafka
25. 12. 2018 22:43:39
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380783
ne
verified
rating uzivatele
(22 hodnocení)
26. 12. 2018 10:26:13
toto tazko urobis cisto v DB, toto je biznis logika ktoru by som mal radsej v samotnej aplikacii na tvojom mieste..
1. z DB by som vybral najvacsiu hodnotu integer stlpcu ( SELECT MAX(stlpec) AS max_stlpec FROM tabulka )
2. pripocital + 1
3. zistil ci v prichadzajucich datach tato hodnota existuje ak ano ulozil ju a dalej iteroval s + 1..
4. pri neexistencii fail a koniec..
co sa tyka vzorcov:
spravnu sekvenciu overis napr. funkciou range
range( min($pole_s_hodnotami), max($pole_s_hodnotami) ) === $pole_s_hodnotami // porovnat ci su polia rovnake
resp. si spocitat sucet: array_sum(range( min($pole_s_hodnotami), max($pole_s_hodnotami) )) === array_sum($pole_s_hodnotami) // ak nie je dodrzane poradie v $pole_s_hodnotami
26. 12. 2018 10:26:13
https://webtrh.cz/diskuse/konsekutivne-radenie-validacia#reply1380782
Pro odpověď se přihlašte.
Přihlásit