像 facebook 这样的社交网络如何按照最初发布的顺序在页面上显示不同的内容,例如照片、状态、用户活动。我做了很多研究,但似乎找不到任何关于如何使用 PHP 和 MYSQL 完成的好例子。
我已经包含了一个视觉示例来说明我的意思。
我认为您的意思是不同的内容位于单独的表格中,例如照片、状态更新、新连接等。并且您希望最后一面墙以相同的时间顺序将所有这些表格中的数据拉到一个单独的墙上。所以,我建议为墙创建一个新表,其中包含以下主要字段:
Activity_identifier
,activity_id
和timestamp
. 这Activity_identifier
是活动的预定义身份,例如分享照片(比如说 1)、在墙上发帖(比如说 2)等,并且timestamp
是用户记录该活动的时间,并且activity_id
是该活动的 id对应的表。
每次用户创建一个新活动时,在填充该活动的对应表时,还要在该表中记录一个对应的条目用于墙。
现在,您创建墙的最终查询只需调用这个新表 for wall with ORDER BY TIMESTAMP DESC
,然后需要通过外键将结果数据与其他活动表(Activity_identifier
在此处智能使用)连接,activity_id
以按照确切的时间顺序重新创建墙命令用户创建它们。
对于墙上的增量调用,维护最后一个查询的时间戳(比如说xtime)和每个调用 do timestamp > xtime ... ORDER BY TIMESTAMP DESC
。
希望这可以帮助!
您可以简单地将一个字段存储在数据库中,该字段包含创建指定内容时的时间戳或创建日期,并且从数据库中选择它时只需按提到的 creation_date 对其进行排序:)
在每次插入(或更新)时使用表中的Timestamps字段(至少我是这样做的),默认值为CURRENT_TIMESTAMP,这将让您使用简单的 SQL 语句按插入的日期(和时间)排序
将其视为发布者和订阅者。每条消息在联结表中都有一个接收者列表。
Message
------------
message_id
message_body
Message_receivers
------------
message_id
user_id
Message_photos
------------
message_id
photo
这是我为我获取消息的方式(user_id 1):
SELECT m.*, mp.*
FROM Message m
JOIN Message_receivers mr
ON mr.message_id = m.message_id AND mr.user_id = 1
LEFT JOIN Message_photos mp
ON mp.message_id = m.message_id
ORDER BY m.message_id DESC
您在用户发帖时更新这些列表,而不是在用户阅读他们的新闻提要时尝试构建列表,因为即使您可能有很多帖子,您也会有更多的阅读量。
Message_receivers 记录将过期并滚降。新闻提要只能追溯到到目前为止,但如果您转到用户的页面,您可以看到他们的所有帖子。
当他们进行查询时,他们有一个 ORDER BY 子句。例如:
SELECT `photos`
FROM `submissions`
ORDER BY `dateline` DESC
dateline
可以存储为整数unix 时间,然后使用简单的数学来设置其他参数。例如:
$sql = "SELECT `photos`
FROM `submissions`
WHERE `dateline` >= " . (date() - 60*60*24*7) . "
ORDER BY `dateline` DESC";
这只会为您提供过去一周的提交。
使用时间戳列并跟踪代码中每个条目的插入时间。查询数据时,ORDER BY
时间戳列。