Ricavare i valori di un campo Enum di MySQL

di Alessandro Raffa, in UserScript, Database,

In MySQL è possibile assegnare ad un campo di una tabella il tipo ENUM (elenco enumerativo), per preimpostare nella struttura del database stesso tutti e soli i possibili valori (fino ad un massimo di 65.535 voci) che quel campo potrà assumere.

Volendo simulare, ad esempio, una variabile booleana potremmo eseguire questa query SQL:

CREATE TABLE nome_tabella (
   campo_booleano ENUM('Y','N')
)

Più in generale è possibile realizzare qualcosa del genere:

CREATE TABLE nome_tabella (
   nome_campo ENUM('valore1','valore2','valore3', ... ,'valoreN')
)

Supponendo, in un secondo momento, di dover semplicemente elencare i possibili valori assegnabili a nome_campo o di dover creare un campo SELECT in un form HTML, per assegnare il valore desiderato, dovremmo riaprire il database per appuntarci tutti i possibili valori. E se fossero davvero 65.535?

Una soluzione, a mio avviso utile, esiste.
Eseguendo la query SHOW COLUMNS FROM nome_tabella LIKE 'nome_campo' e richiedendo il valore type si ottiene una stringa di tipo enum('valore1','valore2','valore3', ... ,'valoreN'). Utilizzando la funzione Replace è possibile eliminare da questa stringa i caratteri che non ci servono, lasciando soltanto le virgole come separatori dei valori. A questo punto si può 'splittare' la stringa ottenuta, imponendo come separatore proprio la virgola.
Si otterrà un array contente i possibili valori del campo di tipo ENUM.

Ecco il codice:

<%
'... codice per l'apertura della connessione: objConn.Open etc etc

Set objRS = objConn.Execute("SHOW COLUMNS FROM nome_tabella " &_
                            "LIKE 'nome_campo'")

strEnum = Replace(objRS("type"),"enum(","")
strEnum = Replace(strEnum," ","")
strEnum = Replace(strEnum,"'","")
strEnum = Replace(strEnum,")","")

arrEnum = Split(strEnum,",")

For i = 0 To UBound(arrEnum)
  Response.Write arrEnum(i) & " <br> "
Next

Set objRS = Nothing

%>

In questo modo, dovendo aggiornare la struttura del database, per aggiungere ad esempio la voce valoreN+1, non dovremo ricordarci di modificare tutte le pagine ASP dove abbiamo elencato le voci possibili di nome_campo, ma tutto avverrà in automatico.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi