2012-06-04 2 views
1

데이터베이스 테이블에서 비디오를 가져 오려고합니다. 조건 : 사용자의 개인 정보 설정이보기를 제한하지 않는 경우에만 동영상을 포함해야합니다.조건부 MySQL 쿼리 - 결과의 프라이버시

비디오 표 : video table

개인 정보 보호가 될 수 0, 1, 2 또는 3

관계 테이블 : relationships

것은 이제 나는 모든 동영상의 페이지를 싶어한다고 가정 해 봅시다 나는 친구가 아닌 사람들의 동영상을 포함해서는 안된다는 제한을두고있다. (나중에, "연락처"를 포함하도록이 쿼리를 확장해야합니다.)

조회해야 설정이 개인 정보 보호있는 모든 동영상 의미

!

개인 정보 보호 = 0

개인 정보 보호 = 1 (프로필 비디오가 숨겨져 있습니다)

개인 정보 보호 = 3 나는를 이 회원의 친구 목록에

내 사용자 ID 내가이 네가 윌리엄 이니 시도 1.

입니다 나는 IF 문이 단지 쿼리의 선택 부분에서 사용할 수있는 가정

SELECT videos.*, 
FROM `video_table` AS `videos` 
WHERE 
(
    videos.privacy != 1 
    OR (
     videos.privacy = 3 
     AND '1' IN (
      SELECT friendslist.relationid 
      FROM friendslist 
      WHERE friendslist.userid = videos.userid 
      AND friendslist.friend = 'yes' 
     ) 
    ) 
) 
LIMIT 20 

: 예,하지만 그것은 나에게 원하는 결과를 제공하지 않습니다?

의사 코드의 조회 : 모든 비디오를 선택 WHERE 개인 정보 보호 = 1 AND IF (개인 정보 보호 = 3)) 나는 모든 비디오를 보여줄 수있는 방법

을 {myuserid는 users_friendslist에 있어야합니다}하지만, 사람에서 사람을 제외! 나는 누구와 친구가 아니야?

+0

비디오 테이블과 사용자 테이블은 어떤 관계가 있습니까? 사용자 테이블 스키마를 표시합니다. –

+0

다른 사람들을 향한 기본적인 예의로서 당신을 도운다면 대답을 받아들이는 것을 잊지 마십시오 ... –

답변

0
SELECT * 
FROM video_table AS v 
WHERE privacy = 0 
    OR (privacy = 3 
     AND @myId IN (
      SELECT f.relationid 
      FROM friendslist AS f 
      WHERE f.userid = v.userid 
      AND f.friend = 'yes' 
     ) 
    ) 
LIMIT 20