2011-04-07 6 views
1

여러 테이블의 쿼리에 대한 도움이 필요합니다.mysql 쿼리에 대한 도움말

내 데이터베이스 : I이 테이블 다음 한 :

1. users (user_id, user_name, ..) //user_name is unique. 
2. guestbook_comments(owner_id, comment_author_id, comment ..) 
3. profile_photo(profile_photo_id, user_id, path) 

내 문제 :

  1. 내가 guestbook.php?user=sudeep 같은 URL이 : 나는 다음과 같은 쿼리를 작성하려는 . 그래서 나는 user_name$_GET['user'];user_name (사용자 테이블에서) 고유하게 만듭니다.
  2. owner_id에 대해 guestbook_comments의 모든 항목을 표시하고 싶습니다 (단 user_name 만 알기 때문에 user_idusers 표에서 찾을 필요가 있습니다). guestbook_comments 테이블의 comment_author_id 각각에 대해
  3. , 나는 profile_photo 테이블에서 자신의 테이블 users에서 user_namepath을 싶어.

내 방식 : 먼저 나는 특정 USER_ID에 대한 모든 방명록 코멘트를 얻기 위해 사용자와 guestbook_comments 테이블을 가입 할 수 있습니다. 그렇다면 while loop에서 과 profile_photo 테이블을 합치면 각각 user_namepath이됩니다.

필자의 접근 방식이 효과적인지 의심 스럽다. 그렇게 할 수있는 올바른 방법이 있는지 말해 줄 수 있습니까?

$sql = "SELECT u.user_id, g.owner_id, g.comment_author_id 
FROM guestbook g 
INNER JOIN users u ON u.user_id = g.owner_id 
WHERE u.user_name = $user_name"; 

    while($row = mysql_fetch_array($result)) {   
     $author_id = $row['comment_author_id']; 
     $sql = "SELECT u.user_name, p.path 
       FROM profile_photo p 
       INNER JOIN users u ON u.user_id = p.user_id 
       WHERE u.user_id = $author_id; 

       //display comment text from guestbook, user_name from users, and photo from profile_photo 
    } 

이 긴 질문과 도움을 주셔서 감사합니다.

+0

을 찾아, 메모를 찾아 방명록 글을 발견, 사용자의

SELECT u.user_id, g.owner_id, g.comment_author_id, g.comment_text, c.user_name, p.path FROM users u LEFT JOIN guestbook g ON u.user_id = g.owner_id LEFT JOIN users c ON c.user_id = g.comment_author_id LEFT JOIN profile_photo p ON p.user_id = g.comment_author_id WHERE u.user_name = $user_name 

:

$sql = "SELECT u.user_id, g.owner_id, g.comment_author_id, p.path FROM guestbook g INNER JOIN users u ON u.user_id = g.owner_id INNER JOIN profile_photo p on u.user_id = p.user_id WHERE u.user_name = $user_name"; 

+0

@Craig White, 나는 전문가가 아니기 때문에 더 효율적이고 효과적인 방법이 있는지 알고 싶습니다. 효율적인 방법인지는 의심 스럽습니다. – sudeep

답변

1

는 단일 쿼리를 시도? 당신의 문제는 무엇입니까? SQL 쿼리가 실패 했습니까?
2

누락되었거나 사용자 당 2 건이 아니라 데이터베이스에 1 건의 호출로 모든 조인을 동시에 처리 할 수 ​​있습니까? 그것은 모두가 좋아 보인다 덧글의 사진