<分区>
我有一个 web 应用程序,我在其中使用 php 提供文件下载服务。
一切正常,我在 file field
中有下载栏我在哪里增加它。
但我想获得完整的下载统计数据,例如 each day
上的下载量或在 month
或 time of day
或来自 which location
但我无法找到如何为此设计 mysql 表。我是否需要为此在数据库中记录每个下载请求。现实世界中的任何设计模式或示例
<分区>
我有一个 web 应用程序,我在其中使用 php 提供文件下载服务。
一切正常,我在 file field
中有下载栏我在哪里增加它。
但我想获得完整的下载统计数据,例如 each day
上的下载量或在 month
或 time of day
或来自 which location
但我无法找到如何为此设计 mysql 表。我是否需要为此在数据库中记录每个下载请求。现实世界中的任何设计模式或示例
最佳答案
创建一个类似如下的表:
+-------------+---------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+-------------------+----------------+
| download_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| created | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
| filename | varchar(32) | YES | MUL | NULL | |
| ip | int(10) unsigned | NO | MUL | NULL | |
+-------------+---------------------+------+-----+-------------------+----------------+
每次下载文件时,将文件名和 IP 地址插入相应的列(其他两列将自动填充正确的信息)。然后您可以对该表执行查询以收集您的分析。例如:
如果您想查看 2013 年 6 月的下载量:
SELECT COUNT(*) AS total_downloads FROM file_download WHERE DATE(created) BETWEEN '2013-06-01' AND '2013-06-30';
如果您想查看文件“somefile.zip”自发布后被下载了多少次:
SELECT COUNT(*) AS total_downloads FROM file_download WHERE filename = 'somefile.zip';
或者如果您想查看“somefile.zip”被下载了多少次,不包括同一访问者下载的重复项:
SELECT COUNT(*) AS total_downloads FROM file_download WHERE filename = 'somefile.zip' GROUP BY ip;
通过为每次下载记录一个条目,您可以非常灵活地选择可以分析的数据类型。每个条目占用的空间量将是最小的,并且与为每次下载递增单个值相比,您可以访问更多选项。
关于php - 如何设计用于文件下载统计的数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17939669/
相关文章:
mysql - 仅当新值不为空时才在 DUPLICATE KEY UPDATE 上合并两个表
sql - 处理 "Insert Into TABLE Values()"语句中的标识列?
php - Laravel 文件上传只需将文件名发送到 Controller
php - fatal error : Exception thrown without a stack frame in Unknown on line 0, session_start
php - 如何从 cakephp 默认布局调用 Controller ?