我想在我的网站上实现一个保真程序,类似于 stackoverflow 上的程序。
我希望能够为连续 30 天访问我的网站的用户提供某种奖励。
[MySQL] 什么是最好的表架构?
[PHP] 我应该使用什么样的算法来优化这个任务?
最佳答案
与@Matt H. 提倡的方法相比,我更喜欢数据库中的更多原始数据。制作一个表格,记录站点的所有登录(或者,如果您愿意,新 session 启动)及其时间和日期:
CREATE TABLE LoginLog (
UserId INT NOT NULL REFERENCES Users (UserId),
LoginTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)
CREATE INDEX IX_LoginLog USING BTREE ON LoginLog (UserId ASC, LoginTime DESC)
只需在登录时将 UserId 插入表中。当然,我对您的数据库做了一些假设,但我认为您将能够适应。
然后,检查前三十天的每一天的离散登录:
SELECT COUNT(*)
FROM (SELECT DATE(log.LoginTime) AS LoginDate,
COUNT(*) AS LoginCount
FROM LoginLog log
WHERE log.LoginTime >= DATE(DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 30 DAYS))
GROUP BY LoginDate
HAVING COUNT(*) > 0) a
如果结果是 30,你就是金牌。
我承认我有一段时间没有接触 MySQL(最近主要在 SQL Server 和 PostgreSQL 上工作),所以如果语法有点不对,我深表歉意。不过,我希望这个概念有意义。
关于PHP/MySQL - 富达程序实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4934516/