2011-04-07 52 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";