[PHP/MySQL] Waarden van SET-veld aanpassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb een vraag omtrend het aanpassen van de waarden van een SET veld (MySQL).

Ik heb een tabel usergroups, dat bestaat uit een id en een naam. Daarnaast heb ik een module tabel, waarin zich een veld bevind dat de toegang tot de module regelt aan de hand van de groupid. De veld is van het type SET, met een aantal vooraf ingestelde waarden.

Via het CMS kan een uesrgroup worden toegevoegd. Mijn vraag is nu: hoe kan ik de id van de usergroup toeveogen aan de waarden van SET veld?

voorbeeld:

er zijn 2 groepen met id 1 en 2. De lengte/waarden van de SET veld ziet er dan als volgt uit: '1','2'. Nu wordt er een groep toegevoegd met id 3. Deze waarde moet worden toegevoegd, zodat de lengte/waarde van de SET veld er als volgt uit ziet: '1','2','3'.

Hoe moet dit, als ik dit mbv PHP wil laten gebeuren? Ik heb al iets gelezen over ALTER TABLE in combinatie met CONCAT, maar dit werkte niet.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Je zult inderdaad de tabel moeten aanpassen met ALTER TABLE.

Allereerst moet je de huidge waardes van de kolom opvragen. Met CONCAT kun je hieraan je nieuwe waarde vastplakken, en hiermee de tabel updaten.
Dit raad ik je echter af. Gebruik liever een normale koppeltabel waarin je je relaties vastlegt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
frickY schreef op dinsdag 31 januari 2006 @ 19:34:
Gebruik liever een normale koppeltabel waarin je je relaties vastlegt.
Bedoel je hiermee een extra tabel waarin ik een koppeling maak van een module met een groep, dus elke mogelijkheid in een nieuwe rij?

Acties:
  • 0 Henk 'm!

Verwijderd

Dit is slecht design / misbruik van de database. SET gebruik je om een aantal strings te kunnen gebruiken als vast bepaalde veldwaarden zonder hier plaats aan te verspillen (een SET mapt de optie die je als string aanlevert intern naar een int). Om te verwijzen naar andere records gebruik je best unsigned ints (met eventueel een index erop), en ZEKER geen set als de lijst waar je naar refereert dynamisch is. (SET is trouwens tot 255 opties beperkt geloof ik omdat het veld 1 byte gebruikt).

Acties:
  • 0 Henk 'm!

Verwijderd

Maar als je het dan toch wilt, dan moet je dat met de volgende code doen;

SQL:
1
ALTER TABLE `test` CHANGE `veld` `veld` SET( 'oud', 'ook_oud', 'nieuwe optie' ) NOT NULL


...waarbij je zelf mag uitzoeken hoe je de oude waarden van je SET daarin mee kunt nemen.
Ook dat kan namelijk, de waarden van een SET veld zijn uit te lezen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ga dan liever voor een koppel tabel. Een SET veld is blijkbaar niet geschikt hiervoor ;)

Bedankt voor hulp!
Pagina: 1