Php 为用户建模的最佳方式';时间线';数据库中活动的分类
我目前正在建立一个基于网络的迷你社交网络。像Facebook一样,每个用户都有一个时间线,在那里发布最近的活动。这些活动包括状态更新、页面帖子、添加新朋友和喜欢页面 它们在数据库中分别使用以下具有相应列的表进行建模: 用户Php 为用户建模的最佳方式';时间线';数据库中活动的分类,php,mysql,sql,database,database-design,Php,Mysql,Sql,Database,Database Design,我目前正在建立一个基于网络的迷你社交网络。像Facebook一样,每个用户都有一个时间线,在那里发布最近的活动。这些活动包括状态更新、页面帖子、添加新朋友和喜欢页面 它们在数据库中分别使用以下具有相应列的表进行建模: 用户 用户id 名字 姓氏 状态 身份证 用户id 内容 时间 发布 用户id 页码号 内容 时间 朋友 朋友1 朋友2 地位 时间 喜欢 页码号 用户id 时间 问题是,我需要以相反的时间顺序显示所有这些活动。您可能注意到,这些表中有一个time列,但是如果这
- 用户id
- 名字
- 姓氏
- 身份证
- 用户id
- 内容
- 时间
- 用户id
- 页码号
- 内容
- 时间
- 朋友1
- 朋友2
- 地位
- 时间
- 页码号
- 用户id
- 时间
问题是,我需要以相反的时间顺序显示所有这些活动。您可能注意到,这些表中有一个time列,但是如果这些表有不同的列,我将如何查询所有这些活动?你知道我要怎么做吗?蒂亚 您可以尝试创建一个以@user_id为参数的存储过程,并在其中进行以下查询:
SELECT status_id AS activity_id, time, "StatusUpdate" AS activity_desc
FROM STATUS
WHERE user_id = @user_id
UNION
SELECT page_id AS activity_id, time, "LikePage" AS activity_desc
FROM LIKE
WHERE user_id = @user_id
.
.
--Here specify selections from other tables as well
ORDER BY time DESC
我希望这能给你一个如何去做的指针。让我知道这是不是你要找的
增编:
上面的查询返回按时间顺序排序的不同类型的活动列表。现在,在您的业务逻辑层中有了这个结果,您可以通过调用特定活动类型的存储过程来获取特定活动的其他详细信息,这取决于它的activity\u DESC
字段。存储过程可能如下所示:
CREATE PROCEDURE GetStatus @status_id INT
AS
SELECT * FROM STATUS
WHERE status_id = @status_id
获取活动方面的详细信息也有助于提高性能,因为只有在需要在时间轴页面上显示活动的详细信息时,才会获取活动的详细信息 谢谢你的回答!这个解决方案的问题是,我必须查询每个表的其他列以显示每个活动的详细信息,这不是很有效。例如,如果过程生成的查询结果中的第1行用于状态更新,那么我必须查询状态的内容。然后,如果第2行是页面中的一篇文章,那么我必须查询页面id和文章内容。有什么建议吗?非常感谢。我已经附加了一个附录,请检查我上面的解决方案。