通过特定行值动态获取列名

Posted

技术标签:

【中文标题】通过特定行值动态获取列名【英文标题】:Get column name dynamically by Specific row value 【发布时间】:2013-05-18 07:14:48 【问题描述】:

我对编写查询感到震惊。 这里我想根据一些特定的值来显示列名

例如,我的桌子是这样的:

id  | fruits   |vegetables    |softdrink
-----------------------
1   | apple    | Onion        | Pepsi
2   | mango    | Potato       | Coke    
3   | banana   | Bringal      | RedBull

如果我有一个值“芒果”,那么我应该将列名设为水果或

如果我有一个值“RedBull”,那么我应该将列名设为 softdrink

注意:我有很多大约 48 列可以从其中任何一个中获取名称

【问题讨论】:

动态 sql,我猜。 @JW웃,我该如何写动态sql 怎么样:***.com/questions/8676354/… @Luceos 我在一张桌子上 如果eg 都在record 中,那么应该返回什么??@zan 【参考方案1】:
set @q= CONCAT('SELECT columns.column_name 
                from table inner 
                join information_schema.columns 
                on columns.table_schema = "dbname" 
                and columns.table_name = "table" 
                and ((',
                (SELECT GROUP_CONCAT(CONCAT('columns.column_name="',column_name,'"',' and table.',column_name,' = "value','"') SEPARATOR ' OR ')
                FROM INFORMATION_SCHEMA.COLUMNS 
                WHERE table_name = 'table'),
                '))');
prepare query from @q;
execute query;

这确实有效..

呼!

小提琴:http://sqlfiddle.com/#!2/9420c/2/2

PS:table 替换为您的表名,dbname 替换为您的数据库名称,value 替换为您的值

【讨论】:

在第一个语句中??替换值后检查语句【参考方案2】:

由于您尽可能加密了您的问题,我只能猜测。

这张桌子设计不好。它应该是这样的

 col  | value
 col1 | a
 col1 | b
 col2 | d

等等。

比你可以轻松地从价值中获取你的 col

【讨论】:

没错,这就是桌子的设计……他的问题。 我真的需要改变我的表格设计吗,现在我的表格很简单,我只需要获取列名就可以了

以上是关于通过特定行值动态获取列名的主要内容,如果未能解决你的问题,请参考以下文章

如果 Selenium Java 中的“文本”匹配,如何获取动态表中的特定行值

MySQL 使用动态行值作为列名

如何在动态查询中将行值连接到列名

mysql选择动态行值作为列名,另一列作为值

Mysql - 通过引用另一个数据集动态更改列名

如何使用 JQuery 从动态 html 表中获取选定的行值?