2012-03-02 3 views
0

이번 (내) SQL 문제로 이번 주말에 해결되지 않으면 미쳐 버릴 수 있습니다!SQL을 사용하여 공유 블로그에서 사용자 게시물 및 댓글 가져 오기

간단한 공유 블로그 (많은 작성자가 기여 함을 의미).

게시물 :

:
  • 제목
  • 내용
  • 댓글을 author_id

    • ID의 내 데이터베이스에 두 개의 테이블을 생각해 보자
      • ID
      • author_id
      • 내용

      목표를 POST_ID : 나는 기여자 (=> 고정 author_id)의 모든 활동을 표시합니다. 내가 활동을 의미하는 것은 :

      • 사용자가 게시물을 작성하고 주석하는 경우 : 사용자가 게시물을 만들었지 만 언급하지 않는 경우 게시물 제목 및 사용자 의견
      • 표시 : 디스플레이 제목 만
      • 을 게시 게시물 제목과 나는이 SQL 스크립트를 시도

      사용자의 코멘트를 표시 : 사용자가 게시물을 만들 수 있지만 주석하지 않은 경우

    • SELECT p.id AS post_id, p.author_id AS post_author_id, c.author_id AS comment_author_id, title, c.content 
      
      FROM Posts p JOIN Comments c ON p.id = c.post_id 
      
      WHERE p.author_id = $userId 
      
      OR c.author_id = $userId 
      

      괜찮아 보이지만 사용자가 게시물을 만든 행을 표시하지는 않지만 댓글을 쓰지는 않습니다.

      아이디어가 있으십니까? 고맙습니다. 그래서 같은 -

  • +0

    당신은 가입의 다른 종류가 필요합니다 - 'FULL OUTER JOIN'을 시도해보십시오. 어쨌든, 다른 조인의 차이점에 대해 더 자세히 읽어보십시오. http://en.wikipedia.org/wiki/Join_(SQL) – scibuff

    +0

    내 주말, scibuff를 저장했습니다! 고마워. MySQL을 사용하기 때문에 FULL OUTER JOIN이 지원되지 않습니다. 하지만 LEFT OUTER JOIN은 잘 작동합니다. 답변을 귀하의 의견을 추가, 그래서 그것을 확인할 수 있습니다. Thnx. – htaidirt

    답변

    0

    당신이 게시물 외부의 결과가 게시물에 가입 외부 댓글의 사람들과, 댓글에 가입 UNION 필요, MySQL의에 가입 FULL OUTER을 시뮬레이션하려면

    SELECT p.id AS post_id, 
         p.author_id AS post_author_id, 
         c.author_id AS comment_author_id, 
         p.title, 
         c.content 
    FROM Posts p 
    LEFT JOIN Comments c ON p.id = c.post_id AND c.author_id = $userId 
    WHERE p.author_id = $userId 
    UNION ALL 
    SELECT p.id AS post_id, 
         p.author_id AS post_author_id, 
         c.author_id AS comment_author_id, 
         p.title, 
         c.content 
    FROM Posts p 
    RIGHT JOIN Comments c ON p.id = c.post_id 
    WHERE c.author_id = $userId 
    
    +0

    답변 해 주셔서 감사합니다. 그것은 훌륭하게 작동하며 FULL JOIN을 에뮬레이트하는 좋은 예입니다. 필자의 경우, 게시물이 없으면 주석이 존재할 수 없으므로 필요하지 않습니다. 따라서 LEFT JOIN이면 충분합니다. 다시 한번 감사드립니다. – htaidirt

    +0

    @Hassinus - 그러나 관심있는 사용자가 * 다른 저자에 의해 게시물에 댓글을 달았을 수도 있습니다 - 따라서 두 번째 선택이 필요한 이유입니다. –

    +0

    네가 맞아! 나는 나의 테스트가 나에게 기대 한 행을 주었기 때문에 나는 틀렸다. 그러나 나는 당신이 드러내는 상황을 고려하지 않았다.지금 나는 가장 최근 게시물이나 코멘트에 의해 ORDER 활동 문제가 있습니다. 여기에 완전한 문제가 있습니다 : http://stackoverflow.com/questions/9532140/how-to-select-the-max-of-two-element- of-each-row-in-mysql – htaidirt

    관련 문제