想象一个基本的网站,用户可以在其中随机发布一些内容。该系统使用 mysql-php 并将每个帖子存储在一个表中,称为 tablePost,其中一列存储日期(或时间)。请注意,用户可以在一天内发布多个帖子。我想要实现的是能够获取用户发布的最后 4 天(或更多)的日期。还要获取帖子信息(postid、posttext 等)。示例输出是:
- 2012-04-25(3 个帖子,postinfo...)
- 2012-04-12(2 个帖子,postinfo...)
- 2011-09-12(33 个帖子,postinfo...)
- 2011-03-04(10 个帖子,postinfo...)
我可以想象两种解决方案:
1) 只使用 tablePost 表,通过 php 遍历条目并获取所需数据
2) 创建另一个表,调用tableActiveDays。当用户发布时,可能会使用 INSERT IGNORE 插入一个条目(userId,dateDay)或检查它之前是否没有被插入。因此,每个 (userId, dateDay) 都是唯一的。这样,如果我想获取最近 4 个活跃日,我可以使用一个简单的 select ... order by ... limit by 4 查询。
我的问题是:
- 还有其他方法可以完成这项任务吗?
- 实现这一目标的最有效方法是什么?
最佳答案
创建 INTEGER
字段并将其命名为“dt_timestamp”。当用户发布消息时,保存在 time()
函数的“dt_timestamp”结果中。
更新:
如果您已注册用户,则添加 INTEGER
类型的字段,将其命名为 last_activity
。当用户发布内容时,使用 time()
更新此字段。然后使用这个查询:
SELECT pt.* FROM post_table pt JOIN users_table ut ON ut.id = pt.user_id WHERE
pt.dt_timestamp >= ut.last_activity - 86400 * 4 AND ut.id = % 复制代码needed_user_id%;
users_table
有字段 id
- 用户的 id。 post_table
具有字段 user_id
- 来自 users_table 的字段值。
使用 DATETIME
比使用整数时间戳要慢得多。
关于php - MySQL PHP : how to efficiently fetch previous X dates that include entries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10396655/