0

我正在为一个小社区建立一个社交网络。每个用户都可以上传图片或发布推文并与其他用户分享。

帖子存储在推文表中

tweets : id , user_id , text , date

图片在图片表中

pics : id , user_id , album_id , title(ie:pic.jpg) , text(description) , date

现在我想在他的墙上将所有这些都显示为用户帖子。我不确定最好的方法是什么。

我可以通过添加第三个表来使用规范化来跟踪用户条目及其类型,例如

user_entries: id , entry_type(tweet , pic ) , date

现在我能 :

$entries = $db->get_entries( $user_id );
foreach ( $entries as $ent ){

   if($ent->entry_type == 'tweet' )
    $db->get_tweet($ent->id);
    // show a tweet and for each one get it's comments

   if($ent->entry_type == 'pic' )
    $db->get_pic($ent->id);
    // show a pic and for each one get it's comments

}

但这意味着更慢的代码和大量的数据库连接,更不用说我必须获得每个条目的注释,从长远来看,这会减慢速度。

所以我希望找到一种方法来通过一个查询获得所有这些。我不知道,也许在两个表之间使用 unoin 或更改数据库设计?

4

2 回答 2

1

有第三张表,posts如下所示:

post_id | user_id

给每个帖子/图像一个唯一的 post_id,并从这个新表中选择所有帖子(这称为用户和帖子之间的多对多关系)。当您查询该posts表时,JOIN其他表将获得所有相应的信息。

于 2012-05-19T13:17:08.533 回答
0

如果您有一张非常大的桌子;为什么不将 pics 表拆分为较小的表,然后使用 PIC_ID 您可以稍后将这些表连接在一起,或者只是获取您需要的内容。我会更快

表格1

pic_id user_id

表_2

pic_id 专辑 ID

表3

pic_id 标题(即:pic.jpg)

表_4

pic_id 文本(描述)

表_5

pic_id 日期

于 2012-05-19T13:22:33.047 回答