我有一个表格,里面有很多关于一个人的字段,然后是其他人的几个推荐。
它们被命名为:
"recommendation_1_name“"recommendation_1_company”“recommendation_1_contact”"recommendation_2_name“"recommendation_2_company”"recommendation_2_contact“等等。
我正在尝试提出一个声明,只允许我获得推荐。
我导入了一个excel文件到表格中,所以它只是一个很大的表格。
这就是我所拥有的,它返回一个空集。
select * from questionnaire where 'COLUMN_NAME' like '%recommendation%';我一直在摆弄它,制作了一个只有推荐字段的表,但它仍然没有返回任何内容。
发布于 2015-09-23 01:32:08
Mysql:选择recommendation_1_name,recommendation_2_name等...from (table) where ( user ) = (USERID)或者您可以唯一标识该用户。
发布于 2015-09-23 01:48:44
此查询生成一个动态的SELECT查询,其中包含所有字段,如'recommendation%‘。您只需设置数据库名和表名。您可以直接查询我的查询结果,或者添加WHERE子句。
SELECT
CONCAT( 'SELECT ',
GROUP_CONCAT(COLUMN_NAME SEPARATOR ',\n')
)
FROM information_schema.columns
WHERE TABLE_SCHEMA = 'DBNAME'
AND TABLE_NAME = 'TABLENAME'
AND COLUMN_NAME LIKE 'recommendation%';发布于 2015-09-23 02:35:19
你真的需要规范化你的模式。
但只是作为其他情况下的实验和例子(也许有人真的需要它)。以下是使用存储过程解决此问题的解决方案:
CREATE PROCEDURE `get_recommendations`()
BEGIN
DECLARE Q VARCHAR(100);
DECLARE C_NAME VARCHAR(100);
DECLARE cur CURSOR FOR SELECT GROUP_CONCAT(column_name) as `columns`
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'test'
AND TABLE_NAME ='questionnaire'
AND COLUMN_NAME LIKE '%recommendation%'
;
SET Q = 'SELECT ';
OPEN cur;
FETCH cur INTO C_NAME;
SET Q = CONCAT(Q,C_NAME,' ');
CLOSE cur;
SET @Q = CONCAT(Q,'FROM questionnaire;');
PREPARE stmt FROM @Q;
EXECUTE stmt ;
END不要忘记将TABLE_SCHEMA = 'test'替换为您的真实数据库名称。
https://stackoverflow.com/questions/32723116
复制相似问题