[DB] tabel ontwerp voor pagina's

Pagina: 1
Acties:

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

Topicstarter
Ik heb een CMS met een module waar in je pagina’s kan toevoegen, bewerken en verwijderen. Nu wil ik graag dat de gebruiker de posities van de pagina’s zelf kan bepalen. Door bijvoorbeeld op een pijltje naar boven of onderen te klikken dat een of meerdere pagina’s een positie naar boven of onderen worden verplaats.

Mijn vraag is hoe kan je dit het best opslaan in database. Zodat ik met een SELECT statement het weer uit mijn db kan halen.

Ik dacht aan een extra veld position. En hier een nummer in op te slaan en dan te sorteren op dat veld.
Als dan meerdere pagina’s naar boven verplaatst worden moet ik van elke pagina de postionveld -1 doen. En dan de pagina die dat nummer heeft de de oude waarde geven van de pagina die het hoogste postion nummer had.
Of is hier een makkelijkere methode voor. Heb wel gezocht op Google en GoT kon niet iets vinden hoe ik het nou aan moest pakken. Alvast bedankt

Tabel: Pages
Id
Title
Position

W3designer.nl


  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 30-04 14:01

ThunderNet

Flits!

Posities in een menu, of op een pagina?
2e zou je met een X,Y positie kunnen opslaan..

oftewel, graag wat meer informatie over wat je precies wil :)

[ Voor 28% gewijzigd door ThunderNet op 09-09-2005 13:33 ]

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


  • mark117
  • Registratie: Oktober 2002
  • Laatst online: 23-04 11:08
ik gebruik altijd wel de oplossing om een nieuw veld toe te voegen, je moet dan wel goed opletten dat als je een pagina uit de database verwijderd dat er gaten in de volgorde gaan vallen (ja kan dan niet zo maar een +1 of een -1 doen)

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

Topicstarter
Ja zomaar +1 / -1 doen lijkt me ook linke soep. Daarom zou ik graag weten wat de meest reguliere oplossing hiervoor is of wat andere Tweakers doen.

Het gaat om de positie van de pagina in het menu.

W3designer.nl


Verwijderd

Gewoon voor alle pagina's binnen de context (bijvoorbeeld pagina's met dezelfde moederpagina) een nieuwe waarde invullen in het position veld. Beginnen bij 0 (of 1) en dan oplopend.

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

Topicstarter
Verwijderd schreef op vrijdag 09 september 2005 @ 14:13:
Gewoon voor alle pagina's binnen de context (bijvoorbeeld pagina's met dezelfde moederpagina) een nieuwe waarde invullen in het position veld. Beginnen bij 0 (of 1) en dan oplopend.
Is dat de enige mogelijkheid om alle records dan langs te gaan en dan position waarde te veranderen?

W3designer.nl


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 28-04 18:15

Tomatoman

Fulltime prutser

DarkSilence schreef op vrijdag 09 september 2005 @ 16:00:
[...]

Is dat de enige mogelijkheid om alle records dan langs te gaan en dan position waarde te veranderen?
Op het moment dat je een pagina wilt invoegen tussen nummer 1 en nummer 2, zou je die natuurlijk pagina 1,5 kunnen noemen (floating point paginanummers). Dan hoef je niet alle records te hernummeren. Dat geeft echter wel een probleem. Stel dat je telkens een pagina wilt invoegen direct achter pagina 1. De volgende ingevoegde pagina wordt dan nummer 1,25, vervolgens voeg je pagina 1,125 in, dan nummer 1,0625 enzovoort. Met een 64-bits floating point paginanummer ben je op deze manier echter wel snel door alle mogelijkheden heen. Invoegen direct achter pagina 1 kan minder dan 64 keer.

Resumerend: pagina's invoegen zonder het paginanummer van de reeds bestaande pagina's te verschuiven is geen oplossing, omdat je dan veel te snel door het aantal mogelijkheden heen bent. Je ontkomt er niet aan om de overige pagina's te hernummeren.

Een goede grap mag vrienden kosten.


  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021

Haploid

Doh!

tomatoman schreef op vrijdag 09 september 2005 @ 16:52:
[...]

Op het moment dat je een pagina wilt invoegen tussen nummer 1 en nummer 2, zou je die natuurlijk pagina 1,5 kunnen noemen (floating point paginanummers). Dan hoef je niet alle records te hernummeren. Dat geeft echter wel een probleem. Stel dat je telkens een pagina wilt invoegen direct achter pagina 1. De volgende ingevoegde pagina wordt dan nummer 1,25, vervolgens voeg je pagina 1,125 in, dan nummer 1,0625 enzovoort. Met een 64-bits floating point paginanummer ben je op deze manier echter wel snel door alle mogelijkheden heen. Invoegen direct achter pagina 1 kan minder dan 64 keer.

Resumerend: pagina's invoegen zonder het paginanummer van de reeds bestaande pagina's te verschuiven is geen oplossing, omdat je dan veel te snel door het aantal mogelijkheden heen bent. Je ontkomt er niet aan om de overige pagina's te hernummeren.
Ja, dat is ook ongeveer wat ik had bedacht, al zou ik het met integers doen; dat is wat makkelijker en wat beter te beheersen. Op zich gaat deze oplossing prima. Je begint met stappen van bijvoorbeeld 65,536 tussen alle pagina's. Als je een pagina wilt verplaatsen dat hij ergens tussen valt, dan pak je de gemiddelde waarde van de pagina ervoor en die erna. Zo kun je waarschijnlijk vrij veel pagina's verplaatsen, maar als er veel op dezelfde plek komen, dan loopt het ter plekke vol.

Om dat vollopen te verhelpen kun je vervolgens de pagina's weer gaan hernummeren. Een soort rebuild van de paginanummers. Kost relatief veel tijd, maar komt hopelijk niet vaak voor.

Je kunt heel makkelijk bepalen wanneer zo'n rebuild nodig is: dat is namelijk wanneer je een pagina niet normaal kunt invoegen, dus als de berekende nieuwe positie al bezet is.

[ Voor 7% gewijzigd door Haploid op 09-09-2005 19:04 ]

Hey, I came here to be drugged, electrocuted and probed, not insulted.


  • Rhapsody
  • Registratie: Oktober 2002
  • Nu online

Rhapsody

In Metal We Trust

als het niet vaak voorkomt dat je nieuwe pagina's toevoegt kun je toch gewoon +1, -1 gebruiken :) die extra query voor het hernummeren maakt dan niet zo uit.

🇪🇺 pro Europa!


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 09:30
In typo3 gebruiken ze een bepaalde logica, weet niet precies hoe het werkt maar ze gebruiken getallen als: 256,768,1074.

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021

Haploid

Doh!

Rhapsody schreef op vrijdag 09 september 2005 @ 19:05:
als het niet vaak voorkomt dat je nieuwe pagina's toevoegt kun je toch gewoon +1, -1 gebruiken :) die extra query voor het hernummeren maakt dan niet zo uit.
Als je doet wat tomatoman en ik voorstellen, dan hoef je (bijvoorbeeld) maar 1 op de (32 tot 2^32) keer die hernummering te doen. Toch een vrij significante performanceboost, als het je interesseert hoe snel een paginanummerwijziging gaat. Als dat niet boeit, dan is de hele discussie academisch. B)

Hey, I came here to be drugged, electrocuted and probed, not insulted.

Pagina: 1