使用外键连接两个记录集

时间:2012-09-26 18:29:43

标签: php mysql

我有一个小型社交网站,允许用户对帖子发表评论。我可以根据用户使用SQL添加的朋友显示记录。但是,我希望每个帖子上的评论都直接显示在帖子下方。

发表:

all_id(PK), name, comment, time, expand

评论表:

post_id, name, comment, all_id(FK)

我正在尝试复制Facebook的功能:评论帖子并查看其下方的帖子。我尝试过使用复杂的SQL连接,但没有显示任何数据。

1 个答案:

答案 0 :(得分:1)

虽然您可以在单个查询中获取帖子和所有注释,但结果集可能是不可预见的大,在这种情况下,您可能会耗尽数据库,脚本或服务器的内存。但如果您愿意这样做,请告诉我,我可以发布一个例子。

或者,您可以使用两个单独的查询。第一个会抓住帖子,第二个会抓住与该帖子相关的所有评论。以下是使用PHP和mySQL的示例:

// Connect to MySQL Database
$db = mysql_connect('my_host', 'my_username', 'my_password');
mysql_select_database('my_database', $db);
// Query for Posts from a specific user.
$grabPost = mysq_query("SELECT all_id, name, comment, time, expand FROM posts WHERE name = 'some_user_name'", $db);
// Iterate over each post
while($post = mysql_fetch_assoc($grabPost)) {
    print '<b>' . htmlentities($post['name']) . '</b> - <i>' . $post['time'] . '</i><br />';
    print htmlentities($post['comment']);
    print '<br />';
    // Query for Comments relating to this Post
    $grabComments = mysql_query("SELECT post_id, name, comment FROM comments WHERE all_id = " . $post['all_id'], $db);
    // Iterate over each comment
    while($comment = mysql_fetch_assoc($grabComments)) {
        print '<p><b>' . htmlentities($comment['name']) . '</b> Says: ' . htmlentities($comment['comment']) . '</p>';
    }
    print '<hr />';
}