2012-06-01 3 views
1

내 데이터베이스에 다른 섹션을 표시하는 테이블이 있습니다. 사용자 ID가 'userAccess'라는 데이터베이스 열에있는 경우에만 섹션을 표시하려고합니다.이 열은 쉼표로 구분 된 목록을 볼 수있는 사용자 목록을 갖습니다.쉼표로 구분 된 ID와 일치하는 쿼리 테이블

예 행

id section userAccess 
1  editNews 1,13,15 

그래서 나는 그을 조회하고 내가 % LIKE 시도 뭔가 같은

SELECT `section` WHERE '$userID' is in `userAccess` 

말하지만, 나는 % 1 LIKE한다면 분명히 그 3 사용자를 반환 할 수있는 방법 %.

답변

2
SELECT `section` WHERE FIND_IN_SET('$userID', `userAccess`) != 0 
0

그룹 기반 권한 구조로 이동 한 다음 섹션 및 그룹 ID에 FK가있는 GroupAccess 테이블을 가질 수 있습니다. 사용자는 UserGroup 링크 테이블의 그룹에 할당됩니다. 이것은 많은 유연성을 제공하지만 복잡성은 더 커집니다. 즉

SELECT `section` 
FROM t 
WHERE concat(',', '$userID', ',') like concat(',', `userAccess`, ',') 

, 당신이 두 개의 문자열 주위의 분리를 넣으면처럼 사용할 수 있습니다

또는 실패, 단순히

id section userAccess 
1 editNews 1 
2 editNews 13 
3 editNews 15 
0

또 다른 대안이있다. 시도한 솔루션과 더 유사하고 다른 데이터베이스에서 동일한 접근 방식을 사용할 수 있기 때문에 이것을 제공합니다.

관련 문제