2011-09-10 4 views
9

Devo selezionare una riga dalla tabella sottostante, ma il problema è il valore in $row['city'] è il valore testuale del valore e ho bisogno del suo numero (Toronto = 2). (Come quando abbiamo INSERT INTO, e usiamo di un valore al posto del testo)Come selezionare il numero di valori dei tipi ENUM in MySql?

Richieste Tabella Struttura:

req_id INT 
uname VARCHAR(30) 
city ENUM('New York', 'Toronto', 'Las Vegas') 

risposta

12

Hai solo bisogno di forzare il tuo city in un contesto numerico, dal fine manual:

Se si recupera un valore ENUM in un contesto numerico, viene restituito l'indice del valore della colonna. Ad esempio, è possibile recuperare i valori numerici da una colonna ENUM come questo:

mysql> SELECT enum_col+0 FROM tbl_name; 

Così si desidera che questo genere di cose:

select req_id, city+0 
from your_table 
where city = 'Toronto' 

BTW, è possibile inserire un enum utilizzando la stringa o rappresentazione intera.

+0

Grazie mille, mi ha fatto risparmiare molto tempo. –

+0

+0 è un bel e facile tweak to shortcut CAST (... AS UNSIGNED) come sembra. Cool e grazie! – Steini

2

È possibile utilizzare la funzione CAST. Lo documentation non menziona questo caso d'uso specifico, ma funziona come previsto. Lo preferisco perché sembra elegante e chiaro:

SELECT CAST(city AS UNSIGNED) FROM your_table; 
+0

Nota che nel server MySQL 5.5.38 (Ubuntu 12.04) questa soluzione non funziona se la tabella è una vista che mappa direttamente una colonna ENUM. La soluzione enum_col + 0 funziona anche in 5.5.38. – ddirect