仅使用SQL获取MySQL枚举的值 [英] Getting the values of a MySQL enum using only SQL

查看:176
本文介绍了仅使用SQL获取MySQL枚举的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Web应用程序中,我需要使用MySQL枚举的所有可能值填充< select>

In a web application, I need to populate a <select> with all possible values of a MySQL enum.

当我执行以下任何一个操作时:

When I execute either of:


SHOW COLUMNS FROM  mytable LIKE  'mycolumn';
SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'mytable' AND COLUMN_NAME = 'mycolumn';


我总是以 enum('valueA','valueB','valueC')结尾。

我知道我可以用PHP解析它,但是只能使用SQL来完成吗?
我需要这样的东西:

I know I can parse it with PHP but can it be done using SQL only? I need something like this:


+-----------------+
| values          |
+-----------------+
| valueA          |
| valueB          |
| valueC          |
+-----------------+


推荐答案

虽然我大部分时间都同意不使用枚举,但可以在单个SQL语句中使用:-

While I would agree about not using enums most of the time, it is possible in a single SQL statement:-

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING(COLUMN_TYPE, 7, LENGTH(COLUMN_TYPE) - 8), "','", 1 + units.i + tens.i * 10) , "','", -1)
FROM INFORMATION_SCHEMA.COLUMNS
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
WHERE TABLE_NAME = 'mytable' 
AND COLUMN_NAME = 'mycolumn'

这将适用于最多100个可能值的枚举

This will work for enums with up to 100 possible values

这篇关于仅使用SQL获取MySQL枚举的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆