2011-03-05 90 views
0

我正在MySQL中建立一个数据库,它将被PHP脚本访问。我有一个表是活动流。这包括网站上发生的一切(遵循许多不同的事情,喜欢,upvoting等)。从这个活动流中,我将为每个用户运行一个算法,具体取决于他们的活动并显示相关活动。我应该创建另一个表格来存储每个用户的活动,一旦该算法运行在活动上,或者每次用户访问该网站时,是否应该在活动表格上运行算法?哪种方法可以提供最快的页面加载?

UPDATE:(这是什么,除了上述以更容易理解的方式希望改写)

我有一个数据库表叫activity。每当用户在网站上执行操作时,此表格会创建一个新行。

每次用户登录时,我将在表(activity)中的新行(自用户上次登录以来)运行算法,这些行适用于它们。例如,如果用户正在关注在活动流中对帖子进行了upvoted的用户,那么当用户登录时将显示帖子。我希望用户能够访问之前应用到他们的内容。最简单的方法是创建另一个表,保存已使用该算法运行的行,除了附加到单个用户名之外? (一行可以适用于多个不同的用户)

+0

如果您更改您的问题,这可能会有帮助... – cusimar9 2011-03-05 14:59:42

回答

0

我建议您在单独的表格中跟踪您的用户特定activities,然后在登录后可以更轻松地显示与其相关的所有用户活动。即。所以如果一个用户对棒球和曲棍球有很大的兴趣,你可以从他们最近的活动中检索出来,然后到达你的所有活动表并从中获取相关的项目。

1

我会从一个表和适当的索引开始。使用union语句,您可以执行多个查询(使用不同的索引),然后将所有结果混合在一起。

举个例子,假设你是用户37,42和56的朋友,并且你对篮球和针织感兴趣。并且,假设您有一个关于user_id的索引和一个关于主题的索引。这个查询应该是相当高效的。

SELECT * FROM activity WHERE user_id IN (37, 42, 56) 
UNION DISTINCT 
SELECT * FROM activity WHERE subject IN ("basketball", "knitting") 
ORDER BY created 
LIMIT 50 
相关问题