[SQL] Sort order bepalen

Pagina: 1
Acties:

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
Ik heb een tabel en daar wil ik de sort order van item kunnen beinvloeden, dus nu had ik het idee om een extra veld aan te maken en daarop sorten.

voorbeeld table ( mysql ).
code:
1
2
3
4
5
6
CREATE TABLE `categorie` (
  `idCategory` int(11) NOT NULL auto_increment,
  `categoryName` varchar(50) NOT NULL default '',
  `sortorder` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`idCategory`)
) TYPE=MyISAM AUTO_INCREMENT=37 ;


Maar nu heb ik dus een probleem. Hoe ga ik om met het tussen voegen van rijen.

begin situatie
code:
1
2
3
1 - Naampje 1 - 1
7 - Naampje 2 - 2
2 - Naampje 3 - 3


Als ik later een rij wil toevoegen heb ik dus een probleem. Dus ik was eerst van plan het als volgt te doen.

code:
1
2
3
4
1 - Naampje 1 - 1
8 - Naampje 4 - 1.1
7 - Naampje 2 - 2
2 - Naampje 3 - 3


Dat werkt goed. Maar het is wel erg beperkt want zodra ik nu weer een extra rij wil toevoegen tussen rij 1 en 8 kan dat niet zo makkelijk meer. Ik zou de sortorder natuurlijk 1.0.1 kunnen gaan geven, maar dan wordt het op den duur wel een gigantische tabel.

En ik hen het vermoeden dat het toch makkelijker kan. Iemand een leuk ander idee?

Gaarne geen oplossingen in de logica. Want dat is wat ik nou juist probeer te voorkomen.

[edit]
HET HOEFT GEEN MYSQL DATABASE TE ZIJN, ER ZIJN NOG MEER VARIANTEN EN SMAKEN OP DE MARKT. ( Het voorbeeld is alleen in mysql gemaakt aangezien ik dat voorhanden had liggen, sorry voor de caps ) ;)

[ Voor 9% gewijzigd door LuCarD op 02-10-2003 11:41 ]

Programmer - an organism that turns coffee into software.


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Je zou natuurlijk twee dingen kunnen doen.
  1. Maak van tevoren voldoende (extra) velden aan om je gegevens in kwijt te kunnen.
  2. Bestudeer het ALTER TABLE statement eens (waarbij ik moet zeggen dat ik niet weet hoe MySQL daarop reageert...)

My personal website


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 23:48

The Eagle

I wear my sunglasses at night

Geen ISAM maar een Btree als index gebruiken. Blijf je lekker dynamisch, hoef je alleen maar af en toe de index opnieuw op te bouwen. en de DB doet de rest voor je :9

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
Volgens mij ben ik niet duidelijk genoeg geweest.

Ik zoek niet hoe ik mijn tabel wil veranderen. Ik wil graag weten wat ik aan mijn tabel of db structuur moet veranderen om mijn sorteer order zo flexibel mogelijk te maken.

En als ik daar 80 extra velden voor moet aan maken is het goed. Al moet ik 20 extra tabellen bouwen is het ook goed. Zolang ik maar en flexibel db model krijg waarmee ik sorteer order goed kan gebruiken.
The_Eagle schreef op 02 October 2003 @ 11:20:
Geen ISAM maar een Btree als index gebruiken. Blijf je lekker dynamisch, hoef je alleen maar af en toe de index opnieuw op te bouwen. en de DB doet de rest voor je :9
Prachtig maar wat doe je als het een MSSQL tabel is? MySQL heb ik gebruikt als voorbeeld en het uiteindelijk van alles worden. Misschien wel Access :D
OZ-Gump schreef op 02 October 2003 @ 11:19:
Je zou natuurlijk twee dingen kunnen doen.
[list=1]• Maak van tevoren voldoende (extra) velden aan om je gegevens in kwijt te kunnen.
Eens kan ik nix tegen in brengen. Daarom dit topic ;)
• Bestudeer het ALTER TABLE statement eens (waarbij ik moet zeggen dat ik niet weet hoe MySQL daarop reageert...)[/list]
MySql Reageert gewoon goed... Maar dat is niet de vraag die ik stelde... ;)

Programmer - an organism that turns coffee into software.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Een gedachtenspinsel...

ipv een sorteervolgorde van 1,2,3,4 hou je een sorteervolgorde van 1,3,5,7,9, etc. aan. Wil je een item tussenvoegen, dan geef je deze als volgordenummer een 2, en vervolgens voer je een updatestatement uit, waarbij het weer de 'standaardvolgordenummering krijgt'

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
gorgi_19 schreef op 02 oktober 2003 @ 11:41:
Een gedachtenspinsel...

ipv een sorteervolgorde van 1,2,3,4 hou je een sorteervolgorde van 1,3,5,7,9, etc. aan. Wil je een item tussenvoegen, dan geef je deze als volgordenummer een 2, en vervolgens voer je een updatestatement uit, waarbij het weer de 'standaardvolgordenummering krijgt'
Dus ik moet elke keer mijn hele database gaan updaten? Hmmm... niet echt gebruikers vriendelijk ( programmeurs zijn mijn gebruikers ;) ) en volgens mij erg storings gevoelig.

[ Voor 6% gewijzigd door LuCarD op 02-10-2003 11:43 ]

Programmer - an organism that turns coffee into software.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

LuCarD schreef op 02 oktober 2003 @ 11:42:
Dus ik moet elke keer mijn hele database gaan updaten? Hmmm... niet echt gebruikers vriendelijk ( programmeurs zijn mijn gebruikers ;) ) en volgens mij erg storings gevoelig.
Daar heb je stored procedures voor, icm transactions. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

Door een update uit te voeren kun je in 1 commando je tabel aanpassen

code:
1
update tabel set sortorder = sortorder + 10 where sortorder > invoegpunt


Dit kun je combineren met gorgi_19's oplossing. Ik zou alleen niet een ruimte van 2, maar groter aanhouden (10 is zo'n lekker humanreadable stepping ;) ). De bovenstaande query kun je gebruiken waneer de boel toch wat krap wordt (Ik zou sowieso voor een sortveld een int gebruiken aangezien dat veel sneller werkt dan een string!). Bovenstaande query zorgt niet voor problemen omdat het ten eerste weinig last heeft van race condities aangezien het in 1 query gebeurt en ten tweede is sortorder niet een foreign key waardoor het geen problemen geeft deze zomaar te wijzigen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1