IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Kontinuálne číslovanie záznamov v databáze

Aktivity
Avatar
M6692
Člen
Avatar
M6692:4.7.2020 18:54

Ahojte
hľadám spôsob akým zabezpečiť aby mi zobrazovalo kontinuálne číslovanie záznamov v databáze po vymazaní riadku. Klasické ID mi nevyhovuje nakoľko po vymazaní záznamu zo stredu databáze tam zostane skok v číslovaní. Mám vytvorený ďalší stĺpec "Cislo" ktorý potrebujem po každom vymazaní záznamu prečíslovať, čo sa mi nedarí.

Zkusil jsem: Nejako nikde neviem nájsť spôsob ktorý by mi fungoval.

Chci docílit: Ďakujem

 
Odpovědět
4.7.2020 18:54
Avatar
Lu Kiss
Člen
Avatar
Lu Kiss:5.7.2020 10:52

Udelal bych to možná triggerem, ze po smazani řádku projedeš všechny řádky az do konce a nastavis jim nove poradi. Pokud to chceš trochu optimalizovat, tak si v tom triggeru vzit cislo radku mazaneho radku a cislovani prenastavit az od dalšího řádku od aktualne smazaneho.

 
Nahoru Odpovědět
5.7.2020 10:52
Avatar
M6692
Člen
Avatar
M6692:6.7.2020 22:16

Ahoj
presne toto potrebujem, prejsť všetky riadky od začiatku a priradiť im nové číslo poradia. Len neviem ako na to. Skúšal som pomocou Foreach aj pomocou For ale stále sa mi to nedarí. Niekto by mi trošku pomohol?

Editováno 6.7.2020 22:16
 
Nahoru Odpovědět
6.7.2020 22:16
Avatar
M6692
Člen
Avatar
M6692:6.7.2020 22:35

V datagride mi to takto funguje

dataGridView.Rows[e.RowIndex].Cells[0].Value = (e.RowIndex+1).ToString();
 
Nahoru Odpovědět
6.7.2020 22:35
Avatar
Odpovídá na M6692
Matúš Olejník:6.7.2020 23:50

Ahoj, nie som C#ista, ale možno by bolo fájn napísať čo sa tým snažíš dosiahnuť? Je to dobrý pohľad na daný problém? Ak budeš mať v tabuľke milión záznamov a odstrániš prvý tak budeš chcieť ostatných 999 999 updatnúť?

Nahoru Odpovědět
6.7.2020 23:50
/* I am not sure why this works but it fixes the problem */
Avatar
zelvicek
Člen
Avatar
Odpovídá na M6692
zelvicek:7.7.2020 6:17
  1. Pokud tvá tajemná DB podporuje nějakou formu skriptování, přesuň svůj dotaz do sekce Databáze, tamní borci budou umět poradit lépe - viz reakce od Lu Kiss.
  2. V opačném případě uveď:
    1. tajemnou DB (název a další podstatné údaje);
    2. jak k DB přistupují klienti a jak ji využívají (izolace);
    3. hrubý předpokládaný počet záznamů v dotčené tabulce.
 
Nahoru Odpovědět
7.7.2020 6:17
Avatar
Odpovídá na M6692
Michal Štěpánek:7.7.2020 9:15

Jsi si jistý, že to, co chceš udělat je správné? To, že po vymazání řádku už není to stejné ID již použito má svůj důvod. Představ si, že budeš mít někde navázaná data na tuto tabulku a vymažeš tu řádek. Dokážeš si představit, jaký vznikne chaos, když ty ID "přečísluješ"?

Nahoru Odpovědět
7.7.2020 9:15
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.7.2020 10:52

U databaze funguje count, pro cislovani radku vypsane tabulky podle zadanych pozadavku.

SELECT a, b, c, COUNt(*) as d FROM tabulka

Pokud ti jde o stanoveni poradi, treba v menu, to se bohuzel musi rucne. Idealne pomocnou tabulkou, kde mas sloupce
(id_group, id_item, poradi) - group je skupina itemu, kterym nastavujes poradi, coz se dela treba u podmenu u webove stranky, pokud to nechces mit serazene default nebo podle abecedy.

DELETE * FROM tab_poradi
INSERT INTO ... (id_group, id_item, poradi) VALUES (1,3,1, 1,5,2) ...

Pokud to nedelas pres sql db, tak postup je podobny, jen si to musis vytvorit a obsluhovat sam.

 
Nahoru Odpovědět
10.7.2020 10:52
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Peter Mlich
Peter Mlich:11.7.2020 9:05
DELETE * FROM tab_poradi WHERE id_group=1

To tam melo byt. Jakoze smazes vse, co spada do te skupiny, kde to potrebujes cislovat. takze to pak nemusis mazat po jednom. A ten insert se tez tusim pise trochu jinak, ale s googlem by to jiste nasel.

INSERT INTO ... (id_group, id_item, poradi) VALUES (1,3,1), (1,5,2) ...

A jeste mne napadlo, ze by bylo dobre, nepouzivat ajax pri kazde zmene polozky, ale nejdriv si to usporadat do js pole a pak najednou odeslat cele poradi. S ajaxem pri kazde zmene jsem to mel v jednom programu a strasne dlouho dela zmenu, kdyz mas vysokou zatez na server a potrebujes to preba 20x drag drop, jenom. Proste, se dlouho ceka, co ja treba nemam moc rad.

Editováno 11.7.2020 9:07
 
Nahoru Odpovědět
11.7.2020 9:05
Avatar
Zdeněk Petřík:13.7.2020 18:42

Pokud se jedná jen o zobrazení, tak kontinuální číslování zajistí metody konkrétního SQL serveru. Příklad pro MS SQL Server

select *,
  ROW_NUMBER() OVER(ORDER BY idUser DESC) AS Row#
from users
 
Nahoru Odpovědět
13.7.2020 18:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.