查询以检索变量存储在列名称中的数据

时间:2013-04-18 09:30:32

标签: php mysql

我有一个看起来像这样的数据库。

width | 10 | 20 | 30 | 40
----------------------------
  10  | $2 | $3 | $4 | $5
  20  | $3 | $4 | $5 | $6
  30  | $4 | $5 | $6 | $7
  40  | $5 | $6 | $7 | $8

第一行是列名。如果给出两个数值,我怎么能拿出货币价值?

或者将这些数据重组为新列的最简单方法是什么?

编辑:

列名中的数字是高度,宽度列中的数字是宽度。

如果我插入10号高度和20号宽度,我希望3美元成为我的结果。

谢谢!

3 个答案:

答案 0 :(得分:1)

试试这个:

// assert $height column exists before the query
$sql = "select {$height}
        from table
        where width = :b_width";

答案 1 :(得分:0)

我认为你正在寻找这样的东西:

SELECT
  CASE WHEN @height=10 THEN height10
       WHEN @height=20 THEN height20
       WHEN @height=30 THEN height30
       WHEN @height=40 THEN height40
   END value
FROM yourtable
WHERE
  width=@width

请参阅小提琴here

答案 2 :(得分:0)

最好的方法是使用规范化设计重构数据库。

table_1:高度,包含一个具有高度的列

table_2:widths,包含一个具有宽度的列

table_3:h_w_values,包含3列:1.height,2.width,3.value

这是标准化的,易于扩展N个高度和M个宽度。 可选:考虑table_4的可能值(假设你有你的包的固定关税,或者其他)并将table_3更改为(height,width,tariff_id)