通过具体的行值获取列名动态(Get column name dynamically by Speci

2019-09-04 05:39发布

我在写一个query.i搜查,并没有发现任何解决这个来袭。 在这里,我想基于一些特定的值,显示列名

例如,我的表像。

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

如果我有一个值“芒果”,那么我应该得到的列名作为水果或

如果我有一个值“红牛”,那么我应该得到的列名作为软饮料

:我身边有很多48列,从它们中的任何一个获得名

谢谢,有点帮助表示赞赏。

Answer 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与值



Answer 2:

当你尽可能多地加密你的问题,我只能猜测。

此表气味不好的设计。 它应该是这样的

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

等等。

比你可以轻松地从价值得到您的山坳出



文章来源: Get column name dynamically by Specific row value