2011-04-07 50 views
1

我需要一些幫助來自多個表的查詢。幫助mysql查詢

我的數據庫: 我有以下表格:

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。所以我得到user_name$_GET['user'];user_name是唯一的(在用戶表中)。
  2. 我想顯示來自guestbook_comments的所有條目爲特定的owner_id(但我只知道user_name,所以我需要從users表中找到user_id)。
  3. 對於comment_author_id中的每一個guestbook_comments表,我想從表userspath得到他的user_nameprofile_photo表。

我的方法: 首先我加入的用戶和guestbook_comments表來獲取特定user_id的所有留言評論。然後在while loop我加入usersprofile_photo表分別得到user_name和photo path

我非常懷疑我的方法是否有效。你能告訴我是否有正確的方法來做到這一點?

$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

這一切看起來不錯?你的問題是什麼?你的SQL查詢失敗了嗎? – 2011-04-07 22:53:09

+0

@Craig White,正如我所說,我想知道是否有更好,更有效的方式來做到這一點,因爲我不是專家,我懷疑這是否是一種有效的方法。 – sudeep 2011-04-07 23:01:32

回答

1

嘗試一個查詢:

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 

從用戶,找到留言簿條目,發現評論者,發現評論者的照片

2

我是否錯過了某些東西,或者可以將兩個連接同時組合起來,並通過1次調用數據庫來獲取所有數據,而不是每次調用2次?

$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";