Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用户活动(ala)数据库方法。大连接还是多个简单查询?_Php_Mysql_Facebook_Android Activity - Fatal编程技术网

Php 用户活动(ala)数据库方法。大连接还是多个简单查询?

Php 用户活动(ala)数据库方法。大连接还是多个简单查询?,php,mysql,facebook,android-activity,Php,Mysql,Facebook,Android Activity,我需要显示用户在网站上的最后一个活动。 发布评论、上传图像/视频、投票文章等 我有两张桌子: 带有“userID”、“datetime”、“activityID”和“externalID”列的“user\u activity”表 带有“activityID”和“activity”的“活动””表 假设“activityID”=4,那么我知道它会返回到上传的视频(通过查看“activities”表),然后我还知道externalID会从第三个名为“videos”的表返回到“videoID” 对于每种

我需要显示用户在网站上的最后一个活动。 发布评论、上传图像/视频、投票文章等

我有两张桌子:

带有“userID”、“datetime”、“activityID”和“externalID”列的“user\u activity”表

带有“activityID”和“activity”的“活动””表

假设“activityID”=4,那么我知道它会返回到上传的视频(通过查看“activities”表),然后我还知道externalID会从第三个名为“videos”的表返回到“videoID”

对于每种类型的活动都是一样的,如果是审查,那么“外部化”将在“审查”表中变为“审查”

当显示用户活动时,我不想只说用户上传了图像,还想显示上传的图像或视频或其他内容

所以

查询用户上次活动时,我可以通过两种方式获取数据:

1) 从“用户活动”表中获取数据,然后根据“活动ID”对外部表中的每一行进行另一次查询(评论、视频、图像…)

2) 将所有表(用户活动、评论、视频、图像…)一起左外连接,然后仅使用基于“activityID”的相关列

因此,方法1将导致大量的DB查询,因为我需要对每个活动行进行不同的查询。方法2将导致一个大连接

任何关于正反两方面的好建议和方法都更好???

没有


高流量站点的解决方案是,这意味着您将有一些冗余数据,但您的用户活动查询将是一个非常简单的查询,从一个表中获取所有必需的数据。

您所设置的被称为多态关联。这是一个以不同方式反复解决的问题。你可以在interwebz上找到很多关于这个的信息,现在你知道如何找到了

更具体地回答你的问题:视情况而定。如果将表设置为使用InnoDB,并且只使用外键进行连接,那么在数据库上进行连接会更容易。不幸的是,InnoDB不支持多态外键

一般来说,扩展数据库比扩展应用程序更难,因此,将工作从数据库层转移到应用程序层是一件好事。然而,只有在担心扩展的情况下才是如此(记住,过早优化可能会对初创企业造成致命打击)


请在Quora上查看此问题的主要答案,以了解更多详细信息:

因此,您建议将我需要的所有数据添加到“用户活动”表中?这将是一个20多列的表格。如果用户更新/删除内容会发生什么?在更新时,您需要使用冗余数据更新此表。这可以通过应用程序代码或数据库触发器来完成。关于专栏,是否有20多个专栏或更新摘要取决于您。我会将所有不同类型的用户更新(照片、评论、视频)转换为一个独特的实体(活动更新),该实体将保存数据,以便在活动提要中显示。