Wildcard HTTPS certifikát zdarma ku každej doméne
Zobrazují se odpovědi 1 až 8 z 8

Konsekutivne radenie - validacia

  1. 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.

  2. Co se právě děje na Webtrhu?
  3. 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.

  4. 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.

  5. //Jsem asi de*il který to nepochopil.

    Ale není na tohle AUTO_INCREMENT?

  6. Citace Původně odeslal Bogdan Zobrazit příspěvek
    //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...

  7. 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

  8. 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

  9. 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

Hostujeme u Server powered by TELE3