我正在MySQL中构建一个可以通过PHP脚本访问的数据库。我有一个表是活动流。这包括网站上发生的一切(包括许多不同的事情,喜欢,提升等)。从这个活动流我将根据每个用户的活动运行算法并显示相关活动。我应该在活动上运行算法后创建另一个存储每个用户活动的表,还是应该在每次用户访问站点时在活动表上运行算法?
更新:(这是上面的内容,除了希望以一种更容易理解的方式改写)
我有一个名为activity
的数据库表。每当用户在网站上执行操作时,此表都会创建一个新行。
每次用户登录时,我都会在适用于他们的表(activity
)中对新行(因为用户上次登录)运行算法。例如,如果用户跟随在活动流中上调帖子的用户,则在用户登录时将显示帖子。我希望用户能够访问应用于他们的先前内容。最简单的方法是创建另一个表来保存已经使用算法运行的行,除了附加到单个用户名之外? (一行可以适用于多个不同的用户)
答案 0 :(得分: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
答案 1 :(得分:0)
我建议您在单独的表格中跟踪特定于用户的activities
,然后在登录后,您可以更轻松地显示与其相关的所有用户活动。即。因此,如果一个用户对棒球和曲棍球说大话,你可以从他们最近的活动中找到它,然后到你的所有活动表并从中获取相关的项目。