我有一个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"搜索特定名称。
答案 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