我正在为一个小社区建立一个社交网络。每个用户都可以上传图片或发布推文并与其他用户分享。
帖子存储在推文表中
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 或更改数据库设计?
有第三个表,posts
如下所示:
post_id | user_id
为每个帖子/图片指定一个唯一的post_id,然后从这个新表中选择所有帖子(这称为用户和帖子之间的多对多关系(。查询posts
表时,JOIN
其他表以获取所有适当的信息。
如果你有一个非常大的表;为什么不把图片表分成更小的表,然后使用PIC_ID你可以稍后将这些表连接在一起,或者只是获取你需要的东西。我会更快
table_1
pic_id user_id
table_2
pic_id album_id
table_3
pic_id标题(即:图片.jpg(
table_4
pic_id文本(说明(
table_5
pic_id日期