Toon posts:

[MySql] Records opnieuw nummeren.

Pagina: 1
Acties:
  • 125 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ey mensen, ik kon zo snel niets vinden in de search dus bij deze dan maar:

Ik heb een tabel met daarin 3 kolommen.
ID, Naam, Volgorde

Nu wordt de volgorde iedere keer gevuld als er een nieuw record toegevoegd wordt. Maar ik moet de volgorde ook weer aanpassen als ik een record verwijder. Anders valt er een gat.

(de volgorde is trouwens beinvloedbaar door de gebruiker, anders had ik wel autonummering kunnen gebruiken om de volgorde te bepalen)

Nu zit ik dus met het probleem om de gaten te dichten...

klein voorbeeldje:

volgorde
[1]
[2]
[ ]
[3]
[ ]
[5]
[6]

Nou moeten de gaten dus verdwijnen en de nummering aangepast worden zodat het als volgt wordt:
[1]
[2]
[3]
etc...

Ik heb er aan zitten denken om via een loop in php ieder record te doorlopen en dan de nummering aanpassen maar dan moet ik zoveel queries draaien...is er een betere oplossing?

Alvast bedankt!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Erhm... Wat maakt het voor de volgorde uit als er een gat valt?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Waarom wil je dit? Dit is namelijk een hel voor je applicatie. Zolang de dataset niet te groot is, gaat het nog wel, maar wat als je straks 10.000 records hebt, en een user verwijderd het 1e record? Dan moet hij 9999 records een nieuw ID gaan geven, en dat ook doorwerken in eventuele gerelateerde tabellen.

Als je perse je ID zo geordend mogelijk wil hebben, sla dan de verwijderde ID's ergens op, en gebruik deze als eerste bij toevoegen van een record. Zo worden de gaten na verloop van tijd automatisch gevuld. Wat je nu wilt doen, is vragen om problemen..

/edit
trouwens.. een eind-user die een ID veld kan wijzigen? Doe dat eens niet?

[ Voor 8% gewijzigd door Verwijderd op 20-06-2004 18:40 ]


Verwijderd

Topicstarter
Verwijderd schreef op 20 juni 2004 @ 18:38:
Waarom wil je dit? Dit is namelijk een hel voor je applicatie. Zolang de dataset niet te groot is, gaat het nog wel, maar wat als je straks 10.000 records hebt, en een user verwijderd het 1e record? Dan moet hij 9999 records een nieuw ID gaan geven, en dat ook doorwerken in eventuele gerelateerde tabellen.

Als je perse je ID zo geordend mogelijk wil hebben, sla dan de verwijderde ID's ergens op, en gebruik deze als eerste bij toevoegen van een record. Zo worden de gaten na verloop van tijd automatisch gevuld. Wat je nu wilt doen, is vragen om problemen..

/edit
trouwens.. een eind-user die een ID veld kan wijzigen? Doe dat eens niet?
Het id wordt ook niet veranderd! Alleen de volgorde waarop de records worden weergegeven.

Op een gegeven moment heeft de gebruiker de mogelijkheid om een nieuw record te plaatsen. Maar als hij dit tussen 2 al bestaande records wil doen, moet ik toch gebruik maken van een volgorde oid???

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Maar als hij dit tussen 2 al bestaande records wil doen, moet ik toch gebruik maken van een volgorde oid???
Stap 1: Haal het volgordeid van de record op die 1 plaats boven hem zit
Stap 2: Update Tabelnaam Set VolgordeID = VolgordeID + 1 WHERE VolgordeID >= Nummer
Stap 3: Voeg item toe

Alleen even opletten op transactions en concurrenyproblemen.. :+

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 20 juni 2004 @ 18:46:
[...]

Stap 1: Haal het volgordeid van de record op die 1 plaats boven hem zit
Stap 2: Update Tabelnaam Set VolgordeID = VolgordeID + 1 WHERE VolgordeID >= Nummer
Stap 3: Voeg item toe

Alleen even opletten op transactions en concurrenyproblemen.. :+
Ja...zover was ik al! :9 Dat gedeelte werkt namelijk al.
Maar, ik heb een tabel met daarin selectievakken waarmee ik meerdere records tegelijk kan verwijderen. Zodoende vallen er dus meerdere gaten tegelijk.
Bij het verwijderen van een enkel record kun je dus wel gebruik maken van jou manier...alleen dan -1 natuulijk. Maar dat werkt niet als je meerdere records tegelijk verwijderd...

  • flipm0
  • Registratie: September 2000
  • Laatst online: 14-11-2025
Een makkelijke oplossing voor je volgordeprobleem lijkt me de volgende:

Wanneer je een record wil toevoegen tussen twee andere records, pak je het gemiddelde van de twee volgorde-id's van die records. Voorbeeld

code:
1
2
3
ID   Volgorde   Naam
3     45             [Whatever1]
4     48             [Whatever2]


Je nieuwe record ziet d'r dan als volgt uit:

code:
1
6     46.5           [Whatever3]


Op die manier kan je gewoon blijven sorteren. Voorwaarde is natuurlijk wel dat je een veldtype pakt dat niet alleen maar gehele getallen kan bevatten

Verwijderd

Topicstarter
Bovenstaande is ook een optie, moet ik all1 alles weer om gaan bouwen...hmmm

Is het miss ook mogelijk om bij alle records, de volgordes met behulp van een query van 1 tot X te vullen?

Dus met behulp van iets als:

code:
1
 UPDATE CategorieTbl SET CategorieOrde = x

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Als ik het goed heb kan een kolom auto-nummering maken, deze er weer afhalen, dan heb je in die kolom ook oplopende nrs staan. Is alleen een beetje performance vernielend.

Of je kan ook gewoon nieuwe records een nummering van 10 geven ( dus 10,20,30,40,50,60 etc.) dan kunnen er 9 nrs tussengevoegd worden. En dan 's nachts van alle bestaande artikelen weer de nummering naar 10-tallen omzetten.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:55

Creepy

Tactical Espionage Splatterer

Of je kan ook gewoon nieuwe records een nummering van 10 geven ( dus 10,20,30,40,50,60 etc.) dan kunnen er 9 nrs tussengevoegd worden. En dan 's nachts van alle bestaande artikelen weer de nummering naar 10-tallen omzetten.
Dit T.S. lijkt alleen een "probleem" te hebben met gaten in de nummering. Alleen gaten in de nummering zijn nu juist voordelig omdat je meteen een nieuw record kan invoegen.

[ Voor 39% gewijzigd door Creepy op 21-06-2004 08:36 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ik neem aan dat je een soort interfaceje heb gemaakt voor de gebruikers? op het moment dat je de boel dan uit je database trekt kun je toch gewoon 'net alsof' doen? in je loopje hoog je een variabele x telkens met 1 op en die geef je weer (en die kun je vervolgens ook weer opslaan als je wil) Dan maakt het niet zo heel veel uit dat er af en toe gaten ontstaan

Verwijderd

Topicstarter
marty schreef op 21 juni 2004 @ 17:26:
ik neem aan dat je een soort interfaceje heb gemaakt voor de gebruikers? op het moment dat je de boel dan uit je database trekt kun je toch gewoon 'net alsof' doen? in je loopje hoog je een variabele x telkens met 1 op en die geef je weer (en die kun je vervolgens ook weer opslaan als je wil) Dan maakt het niet zo heel veel uit dat er af en toe gaten ontstaan
Inderdaad...zo'n soort idee kreeg ik zojuist ook! Ik ga der ff mee aan de slag!
Pagina: 1