2017-08-06 52 views
1

我有一个名为tbl_mainsheet7表创建这样的:来自一个表的COLUMN NAME和COLUMN COMMENT以及另一个表的COLUMN VALUE。怎么样?

pk_mainsheet client_id project_id mainsheet_id project_cat EA_WTRESRVD EA_WTRESRV EA_FEEASBT 
------------ --------- ---------- ------------ ----------- ----------- ---------- ---------- 
      1  111   222   333   3   0   0   0 
      2   11   22   33   3   0   0   0 

的MySQL INFORMATION_SCHEMA.COLUMNS查询像这样创建tbl_mainsheet7:

SELECT `COLUMN_NAME`, `COLUMN_COMMENT` FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` = 'tbl_mainsheet7' 

..returning这样的:

COLUMN_NAME COLUMN_COMMENT           
------------- ------------------------------------------------------ 
pk_mainsheet               
client_id                
project_id               
mainsheet_id               
project_cat               
EA_WTRESRVD EMERGENCY SERVICE CALL         
EA_WTRESRV  EMERGENCY SERVICE CALL AFTER HRS      
EA_FEEASBT  ASBESTOS TEST FEE 

我如何...

SELECT COLUMN_NAME,COLUMN_VALUE,COLUMN_COMMENT FROM ... WHERE ...

也许一个JOIN?我真的在挠挠我的脑袋。

UPDATE

所以我得到这个工作,但对于一个预定列只。我如何使用变量来实现这种动态?

喜欢具有可变有关COLUMN_NAME

SELECT COLUMN_NAME, (SELECT EA_WTRESRVD FROM tbl_mainsheet7 WHERE client_id = '111') AS COLUMN_VALUE, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tbl_mainsheet7' 
+0

直接在SQL中,你不能因为你不能使用列名作为变量。 – scaisEdge

+0

有没有一个php/msqli解决方案? – ASPiRE

+0

是的..有点复杂,但你可以使用PHP中的变量生成mysql代码字符串,并正确地连接值..尝试在SO中进行搜索以建立动态sql – scaisEdge

回答

0

我已经适应从this answer溶液用于与一些改变您需要更换WTRESRVD:1)I把pk_mainsheet为行中的目标表的标识符2)我发现了@sql变量的长度问题,现在似乎在结果中存在一个限制,那就是现在需要更多的列和tbl_mainsheet7中的列。希望有所帮助。

SET @sql = NULL; 

SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'select pk_mainsheet, ''', 
     c.column_name, 
     ''' as COLUMN_NAME, ', 
     c.column_name, 
     ' as COLUMN_VALUE, ''', 
     c.column_comment, 
     ''' as COLUMN_COMMENT from tbl_mainsheet7' 
    ) SEPARATOR ' UNION ALL 
    ' 
) INTO @sql 
FROM information_schema.columns c 
where c.table_name = 'tbl_mainsheet7' 
and c.column_name <> 'pk_mainsheet' 
order by c.ordinal_position; 
-- INTO @sql 

SET @sql 
    = CONCAT('select COLUMN_NAME,COLUMN_VALUE,COLUMN_COMMENT 
      from 
      (', @sql, ') x WHERE Pk_mainsheet = 1 '); 


PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;