2014-04-16 7 views
0

챔피언 이름에 대한 열과 가능한 5 가지 위치 각각에 대한 열이있는 mysql 테이블이 있습니다. 위치 셀에는 "1"또는 "0"이 있습니다. 내가 궁금해하는 것은 특정 챔피언에 대해 "1"과 동일한 열 이름을 반환하는 select 문을 사용하는 방법입니다. 나는이 존재하지 않는 알고 있지만이 같은 일이 :PHP - 값을 기반으로 MySQL 열 이름을 선택하십시오.

SELECT any_rows_that = 1 WHERE name = blah; 

그렇게 열 2와 4는 이름이 "foo는"같은 행의 "1"로 가득 말한다. "foo"가 검색되면 "2"와 "4"를 반환 할 수있는 방법이 있습니까?

EDIT : 더 명확한 예.

5 개의 열이있는 MySQL 테이블이 있습니다. 이름, a, b, c 및 d.

이름은 무엇이든 될 수 있습니다. 그러나 a, b, c 및 d는 "0"또는 "1"값만 가질 수 있습니다. 내가하려는 일은 주어진 이름을 검색하는 것이며, 검색된 특정 이름에 대해 "1"과 같은 열 이름 (a, b, c 또는 d)을 얻습니다.

+0

https://dev.mysql.com/doc/refman/5.1/en/control-flow-functions .html –

+0

귀하의 문제를 이해하지 못합니다. 몇 가지 예를 더 명확하게 제시하십시오. – user3517652

+0

@ user3517652 나는 더 나은 예제를 넣었습니다. – user1895377

답변

0

를 사용하여 자신의 논리를 만드는 것입니다. 하나의 하위 선택을 만들려면 각각의 키/쌍 값을 별도의 행으로 다시 가져 와서 조합을 사용하여 선택해야만합니다. 그래서 1과 일치하는 행을 다시 가져올 수 있습니다. 각 행의 name = 'foo'조건은 쿼리 할 줄을 줄이십시오.

설명 된대로 스키마입니다.

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 
+0

다음은 SQL 피들입니다. http://sqlfiddle.com/#!9/61bc2/1 – jbrahy

관련 문제