PHP - 根据其值选择MySQL列名

时间:2014-04-16 02:33:12

标签: php mysql sql

我有一个mysql表,其中包含一个冠军名称列和一个5个可能位置中的每一个。在位置单元格中,有一个" 1"或" 0"。我想知道的是有一种方法可以使用某种类型的select语句来返回等于" 1"对于任何给定的冠军。我知道这不存在但是这样的事情:

SELECT any_rows_that = 1 WHERE name = blah;

所以说第2列和第4列填充了" 1"在名称" foo"的同一行中。什么时候" foo"被搜查,有没有办法返回" 2"和" 4"?

编辑:更明确的例子。

我有一个有5列的MySQL表; name,a,b,c和d。

名字可以是任何东西。但是,a,b,c和d只能具有" 0"或" 1"。我想要做的是搜索任何给定的名称,我得到的列名称(a,b,c或d)等于" 1"搜索特定名称。

2 个答案:

答案 0 :(得分:0)

一种方法是使用"mysql_field_name"

创建自己的逻辑

答案 1 :(得分:0)

这是一种方法。我必须使用union创建一个子选择的选择,将每个键/对值拉回作为一个单独的行,这样你就可以拉回只匹配1的行。具有name =' foo&#39的条件;在每一行上将拉回较少的行进行查询。

您描述的表架构。

CREATE TABLE `test_table` (
  `name` varchar(11) NOT NULL DEFAULT '',
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL,
  `c` int(11) DEFAULT NULL,
  `d` int(11) DEFAULT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

一些示例数据

INSERT INTO `test_table` (`name`, `a`, `b`, `c`, `d`)
VALUES
    ('foo', 0, 1, 0, 1);

这是查询

select *
from (
    select 'a' as column_name, a as column_value FROM test_table where name='foo'
    union
    select 'b' as column_name, b as column_value FROM test_table where name='foo'
    union
    select 'c' as column_name, c as column_value FROM test_table where name='foo'
    union
    select 'd' as column_name, d as column_value FROM test_table where name='foo'

) query_data
where column_value=1