2011-09-10 44 views
9

Tôi cần phải chọn một hàng từ bảng bên dưới, nhưng vấn đề là giá trị trong $row['city'] là đại diện văn bản của giá trị và tôi cần số của nó (Toronto = 2). (Tương tự như khi chúng ta INSERT INTO, và chúng tôi sử dụng số giá trị thay vì văn bản)Làm thế nào để chọn số lượng giá trị của các loại ENUM trong MySql?

Các yêu cầu cấu trúc bảng:

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

Trả lời

12

Bạn chỉ cần buộc city của bạn thành một bối cảnh số, từ fine manual:

Nếu bạn truy xuất giá trị ENUM trong ngữ cảnh dạng số, chỉ mục giá trị cột sẽ được trả về. Ví dụ, bạn có thể lấy giá trị số từ một cột ENUM như thế này:

mysql> SELECT enum_col+0 FROM tbl_name; 

Vì vậy, bạn muốn loại điều này:

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

BTW, bạn có thể chèn một enum sử dụng một trong hai chuỗi hoặc đại diện số nguyên.

+0

Cảm ơn bạn rất nhiều, nó đã giúp tôi tiết kiệm rất nhiều thời gian. –

+0

+0 là một tinh chỉnh đẹp và dễ dàng cho phím tắt CAST (... AS UNSIGNED) như nó có vẻ. Cool và cảm ơn! – Steini

2

Bạn có thể sử dụng chức năng CAST. documentation không đề cập đến trường hợp sử dụng cụ thể này, nhưng nó hoạt động như mong đợi. Tôi thích nó vì nó trông thanh lịch và rõ ràng:

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

Lưu ý rằng mặc dù trong máy chủ MySQL 5.5.38 (Ubuntu 12.04) giải pháp này không hoạt động nếu bảng là một khung nhìn ánh xạ trực tiếp một cột ENUM. Giải pháp enum_col + 0 cũng hoạt động theo 5.5.38. – ddirect

Các vấn đề liên quan