Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql从动态格式化的列名获取结果_Mysql - Fatal编程技术网

mysql从动态格式化的列名获取结果

mysql从动态格式化的列名获取结果,mysql,Mysql,我必须从另一列的数据生成的列中获取结果。我将用以下例子解释: 数据库中的列名: 月份| am1 | am2 | am3 | am4 | am5 | am6 | am7 | am8 | am9 | am10 | am11 | am12 我希望在查询中从以am+months value开头的列中获取值 我目前的查询是: $query = 'select id, iid, contractnumber, concat("am",`months`) as amount from c

我必须从另一列的数据生成的列中获取结果。我将用以下例子解释:

数据库中的列名:

月份| am1 | am2 | am3 | am4 | am5 | am6 | am7 | am8 | am9 | am10 | am11 | am12

我希望在查询中从以
am
+months value开头的列中获取值 我目前的查询是:

$query = 'select id, iid, contractnumber, concat("am",`months`) as amount from credits where iid > 0';
但这并不是返回特定
am..
列的值(71),而是返回列名,例如
am5

如何直接访问列
am5


谢谢你抽出时间

这是一个糟糕的设计,您应该更改它,但如果您得到的是这样的设计,您可以使用
CASE

select id, iid, contractnumber,
  case months
  when 1 then am1
  when 2 then am2
  when 3 then am3
  when 4 then am4
  when 5 then am5
  when 6 then am6
  when 7 then am7
  when 8 then am8
  when 9 then am9
  when 10 then am10
  when 11 then am11
  when 12 then am12
  end as amount
from credits 
where iid > 0

如果我要去那里,我不会从这里开始:-(是否要修复您的设计?现在,您应该只运行两个查询。首先从
months
中获取值。然后用您的应用程序语言编写第二个查询的列名。但我已经听到有人键入一个巨大而难看的CASE语句作为答案;-)感谢slaakso,一开始它的工作例外双选择,什么表格设计更有效?如果你必须在表格中为每个月保存金额,请将月份放在单独的表格中。不确定表的逻辑是什么,因此不能更具体。