PHP/MySQL - 富达程序实现

标签 php mysql algorithm web debian

我想在我的网站上实现一个保真程序,类似于 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/

相关文章:

sql - mysql 控制台中没有可用的先前输出文件

php - 如何识别网络中的节点集群

c# - c# 中的 autokey vigenere 解密

php - 如何使用 FOSRestBundle 以 JSON 格式返回或显示数据

php - MySQL 中的动态搜索查询

php - 如何在查询时删除solr中的动态字段后缀,如_i,_ txt?

php - 查找连接 3 个表的 mysql 表中最后一篇文章的用户名

java - 是否可以将 MySQL 表的一行作为 Java 中的字符串读取?

mysql - LAMP 开发人员如何开始使用 Redis/Node.js 解决方案?

c++ - 定位涉及线和圆相交的小部件?