2013-06-19 4 views
0

좋아, 열 수가 변동될 수있는 권한 테이블이 있습니다. 이 테이블에 따라 페이지에 탐색 줄이 있습니다. 어떤 사람들은값이 0 인 모든 열을 MySQL 선택하십시오.

같은 것을 할 수있는 방법이 있나요 값이 0

table modperm 
    uid 1234 
    module1 0 
    module2 2 
    module3 1 
    module4 0 
    module5 0 
    module6 1 
... 
... 
... 

없는 경우에는 모든 열을 선택하는 것입니다 내가 해내 꿔 등, 일부는 할 수 없습니다, 일부 모듈을 볼 수 있습니다

SELECT * FROM `modperm` WHERE `uid`='1234' AND value<>0 
+4

이는 점이다 보면 그리고 일대 다 연관성은 트윈 사용자 및 사용 권한을 사용하면이 작업을 매우 쉽게 수행 할 수 있습니다. [Zero, One or N] 규칙을 위반했습니다 (http://en.wikipedia.org/wiki/Zero_one_infinity_rule). – tadman

+2

데이터베이스 정규화에 대해 읽어보십시오. – hjpotter92

+0

엄밀히 말하면 information_schema 데이터베이스의 시스템 테이블에 조인하여 가능합니다. 그러나 재 설계가 훨씬 더 좋은 아이디어가 될 것입니다. 모듈 테이블과 사람 테이블을 한 다음 허용 가능한 각 사람/모듈 조합에 대한 행이있는 링크 테이블을 만듭니다. – Kickstart

답변

0

이 긴 검색어를 사용해 볼 수도 있지만 도움이 될 것입니다.

select uid , group_concat(val) as vals from (
SELECT uid, module1 AS val 
FROM modperm 
WHERE module1 !=0 
and uid = 1234 

UNION ALL 
SELECT uid , module2 
FROM modperm 
WHERE module2 !=0 
and uid = 1234 

UNION ALL 
SELECT uid, module3 
FROM modperm 
WHERE module3 != 0 
and uid = 1234 

UNION ALL 
SELECT uid ,module4 
FROM modperm 
WHERE module4 !=0 
AND uid = 1234 

UNION ALL 
SELECT uid, module5 AS val 
FROM modperm 
WHERE module5 !=0 
and uid = 1234 

UNION ALL 
SELECT uid ,module6 
FROM modperm 
WHERE module6 !=0 
and uid =1234 
)t 

demo

당신은 모듈의 이름을 표시하려는 경우 그와 함께 일하기 정말 끔찍한 스키마의 발견 어디

this demo

+0

다른 대답과 동일 :이 문제는 테이블의 동적 인 특성입니다. 나는 일대 다 스타일 테이블로 이동하고 있습니다. 유지는 막 빠져 나가는 것이었다. – TechHeadDJ

0
select * from modperm; 
    select uid, 
    case when module1 != 0 then 'valid' else 'invalid' end as module1 , 
    case when module2 != 0 then 'valid' else 'invalid' end as module2 , 
    case when module3 != 0 then 'valid' else 'invalid' end as module3 , 
    case when module4 != 0 then 'valid' else 'invalid' end as module4 , 
    case when module5 != 0 then 'valid' else 'invalid' end as module5 , 
    case when module6 != 0 then 'valid' else 'invalid' end as module6 
    ............. 
    from modperm where uid = 1234; 

Fiddle

+0

이 문제는 테이블의 동적 인 특성입니다. 나는 일대 다 스타일 테이블로 이동하고 있습니다. 유지는 막 빠져 나가는 것이었다. – TechHeadDJ

관련 문제