[SQL/PHP] Waarde toevoegen aan ENUM

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dream0r
  • Registratie: Oktober 2001
  • Niet online
Het leek me in eerste instantie niet echt een probleem om een waarde toe te voegen aan een ENUM van veld_x, maar na een tijdje zoeken kon ik absoluut niets vinden waarmee ik aan de slag kon, ik heb de volgende wellicht relevante link wel gevonden:

http://dev.mysql.com/doc/mysql/en/ALTER_TABLE.html

En dan keek ik met name naar het:
code:
1
MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]


Maar hoe dit nou te gebruiken om een extra waarde aan een ENUM toe te voegen? Of kijk ik hier helemaal verkeerd?

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-08 20:27
code:
1
2
3
4
5
6
7
8
mysql> \u test
Database changed
mysql> create table enumtest(
    -> enumcol enum('Y','N'));
Query OK, 0 rows affected (0.08 sec)
mysql> alter table enumtest modify enumcol enum('Y','N','Maybe');
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

Acties:
  • 0 Henk 'm!

  • dream0r
  • Registratie: Oktober 2001
  • Niet online
Skaah, jij geeft de ENUM nu helemaal nieuwe waarden terwijl ik er vanuit ga dat ik geen idee heb wat de waarden zijn van de ENUM waar de nieuwe waarde aan toegekend moet worden.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23:10

Janoz

Moderator Devschuur®

!litemod

Waneer je 'geen idee hebt wat de waarden zijn' neem ik aan dat je dit toevoegen via je applicatie door de gebruiker (oid) laat doen. In dat geval lijkt het me handiger om gebruik te maken van een koppel tabel.

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


Acties:
  • 0 Henk 'm!

  • dream0r
  • Registratie: Oktober 2001
  • Niet online
Het komt er op neer dat ik een rechtentabel heb waarbij ik een veld heb 'Page', deze heeft verschillende waarden, bijv: "news", "guestbook" en evt. nog meer. Dat geeft namelijk aan op welke pagina die rechtenrow actief is. Nu wil de gebruiker een "module" toevoegen aan het systeem die ook een 'page' label heeft. Deze label moet dan worden toegevoegd aan de ENUM.

Hoe zou je eventueel die koppel tabel voorstellen anders? (Met bovenstaande informatie)

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-08 20:27
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> select * from rechten;
+------+----------+---------+--------+
| r_id | r_soort  | r_allow | r_deny |
+------+----------+---------+--------+
|    1 |        1 |       8 |      7 |
|    2 |        2 |      15 |      0 |
+------+----------+---------+--------+
2 rows in set (0.00 sec)

mysql> select * from soorten
    -> ;
+------+-----------+
| s_id | s_name    |
+------+-----------+
|    1 | news      |
|    2 | guestbook |
+------+-----------+
2 rows in set (0.00 sec)

Acties:
  • 0 Henk 'm!

  • dream0r
  • Registratie: Oktober 2001
  • Niet online
Dat is inderdaad een optie, maar dan heb ik dus weer langere queries nodig om de kruis-koppeling op te halen en daarbij zal ik dan mijn gehele rechten class aan moeten passen :) Er is dus echt geen mogelijkheid er gewoon een extra waarde aan toe te kennen zonder dat je de andere waarden weet? :(

Misschien dat ik het dan maar oplos met een stukje code gevonden in een ander topic: (dus toch eerst het ophalen van de bekende waarden en dan de ENUM herschrijven)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
$sql="SHOW COLUMNS FROM tablename LIKE 'fieldname'"; 
$rs=mysql_query($sql) or die(mysql_error()); 
if (mysql_num_rows($rs)==1) { 
    $r=mysql_fetch_array($rs,MYSQL_ASSOC); 
    $enums=$r['Type']; 
    preg_match('/enum\(([^)]+)\)$/',$enums,$matches); 
    $list=split(',',$matches[1]); 
    $list=preg_replace('/\'(.*)\'/','\1',$list); 
} 
print_r($list);
?> 

[ Voor 21% gewijzigd door dream0r op 25-08-2004 12:46 ]

Pagina: 1