2015-01-17 2 views
0

조인 쿼리에 새 사례를 추가하려고하지만 결과에 영향을 미치지 않습니다.여러 사례가있는 내부 조인 쿼리

나는 사용자 포스트가있는 테이블을 가지고 있는데, 누가 (user_id에 의해) 그 친구의 친구인지에 대한 쿼리 검사는 그 포스트가 5 번 이상 신고되었는지를 확인한다. '여기까지 잘 작동합니다. 게시물이 공개되면 지금 확인하고 싶습니다. 그래서이 경우 우정 사건을 무시해야합니다.

새로운 사건을 추가하기 전에 작업 쿼리 : 새로운 사례 확인 (아무것도하지 않음) 추가 후

$sql = "SELECT COUNT(*) AS count_posts 
     FROM mutamba_posts 
     INNER JOIN 
     (
      SELECT aluno_id 
      FROM mutamba_amigos 
      WHERE mutamba_amigos.amizade_id IN 
      (
       SELECT amizade_id FROM mutamba_amigos WHERE aluno_id = '{$myid}' 
      ) 
      GROUP BY aluno_id 
     ) mutamba_amigos ON mutamba_amigos.aluno_id = mutamba_posts.aluno_id 
     WHERE mutamba_posts.post_flags < 5 
     ORDER BY mutamba_posts.post_date DESC"; 

:

$sql = "SELECT * 
FROM mutamba_posts 
INNER JOIN 
(
    SELECT aluno_id 
    FROM mutamba_amigos 
    WHERE mutamba_amigos.amizade_id IN 
    (
     SELECT amizade_id FROM mutamba_amigos WHERE aluno_id = '{$myid}' 
    ) 
    GROUP BY aluno_id 
) mutamba_amigos ON mutamba_amigos.aluno_id = mutamba_posts.aluno_id 
WHERE mutamba_posts.post_flags < 5 
    OR (mutamba_posts.post_visibility = 'show_all' AND mutamba_posts.post_flags < 5) 
ORDER BY mutamba_posts.post_date DESC 
LIMIT {$start}, {$limit}"; 

어떤 도움을 주셔서 감사합니다.

편집 2 : 너무 오래 걸려서 죄송합니다. 나는 멀리있었습니다.

여기 내 표와 몇 가지 샘플 데이터입니다.

게시물 TBL :

post_id| aluno_id | post_text | post_flags | post_visibility |post_date 

--69---|-----9----|Hello world|------0-----|------show_all-- |2015-01-19  
--70---|-----2----|Hi friends |------0-----|------friends----|2015-01-19 
--71---|-----1----|somedays.. |------2-----|------friends----|2015-01-19 

우정 TBL :

id | aluno_id | amizade_id | bloqueado | date 
24 |----2-----|-----33-----|-----0-----|2015-01-02 
25 |----1-----|-----34-----|-----0-----|2015-01-02 
26 |----1-----|-----35-----|-----0-----|2015-01-02 
27 |----2-----|-----35-----|-----0-----|2015-01-02 
28 |----9-----|-----36-----|-----0-----|2015-01-02 

예상 출력, 학생 1과 2 (aluno_id 1 aluno_id 2) 자신의 게시물들이 있기 때문에를 볼 수 있습니다 show_all으로 설정되어 있기 때문에 학생 9 aluno_id 9의 친구 및 게시물입니다. 그러나 학생 9 aluno_id 9은 친구가 없어서 자신의 소식을 더 볼 수 없습니다.

+0

OR 'X (Y 및 X는)'WHERE x' 같은된다. – Barmar

답변

1

검색어에 문제가있어서 mutamba_posts.post_visibility = 'show_all' and mutamba_posts.post_flags < 5을 모두 확인하고 있습니다.

는 표시 여부가있을 때 그들을 대신 OR 연산자를 사용하는 사이에 mutamba_posts.post_flags < 5public 당신이 and 연산자를 사용할 수 없습니다 제거합니다. 이 시도.

SELECT * 
FROM mutamba_posts 
INNER JOIN 
(
    SELECT aluno_id 
    FROM mutamba_amigos 
    WHERE mutamba_amigos.amizade_id IN 
    (
     SELECT amizade_id FROM mutamba_amigos WHERE aluno_id = '{$myid}' 
    ) 
    GROUP BY aluno_id 
) mutamba_amigos ON mutamba_amigos.aluno_id = mutamba_posts.aluno_id 
WHERE mutamba_posts.post_flags < 5 
    OR mutamba_posts.post_visibility = 'show_all' 
ORDER BY mutamba_posts.post_date DESC 

업데이트 :

SELECT mutamba_posts.* 
FROM mutamba_posts 
INNER JOIN 
(
    SELECT aluno_id 
    FROM mutamba_amigos 
    WHERE mutamba_amigos.amizade_id IN 
    (
     SELECT amizade_id FROM mutamba_amigos WHERE aluno_id = '{$myid}' 
    ) 
    GROUP BY aluno_id 
) mutamba_amigos ON mutamba_amigos.aluno_id = mutamba_posts.aluno_id 
WHERE mutamba_posts.post_flags < 5 
    OR mutamba_posts.post_visibility <> 'show_all' 
Union all 
SELECT * 
FROM mutamba_posts 
WHERE mutamba_posts.post_visibility = 'show_all' 
ORDER BY post_date DESC 
+0

왜 'AND 1 = 1'이 필요한가요? – Barmar

+0

@Barmar - 예, 필요하지 않습니다. 약간 혼란 스럽지만 미안하지만 아무런 차이가 없습니다. –

+0

빠른 응답을 주셔서 감사합니다. 작동하지 않습니다. 아무런 효과가 없습니다. 나는 당신이 나를 이해하는지 안다. 내가하고 싶은 것은'post_visibility = 'show_all''이라면 조인을 무시하는 것이다. – sunrisepoet