记录每月用户上传到您的Web应用程序的最佳方式是什么?

时间:2010-04-26 15:57:20

标签: php mysql database-design upload size

我们的网络应用程序允许用户上传照片,它使用在Amazon EC2上运行的LAMP服务器上的PHP脚本来处理图像上传,使用Amazon S3来存储文件,使用MySQL数据库来记录有关图像的数据(用户ID,文件名,标签等)。

我打算在数据库中有一个image_uploads表,每个月都有一个列,每个用户都有一行。这样我就可以跟踪上传的趋势。也可能有视频上传,所以我也有一个video_uploads表。此外,用户可能属于多个组,我想跟踪每个组的每月上传,因此也可能有一个group_uploads表。这意味着对于每个上传的文件,将有2个sql更新查询 - 更新image_uploads并更新group_uploads。

  1. $ filesize = $ _FILES ['Filedata'] ['size'];
  2. UPDATE image_uploads SET data_in_bytes =(data_in_bytes + $ filesize)WHERE month = $ current_month ...(例如 - 我知道这不是正确的sql)
  3. 或者,可能有一个长表记录有关每个上载的数据(日期,用户,大小,媒体)。这样我总是可以在数据库中查询我想要的信息 - 例如每个用户每月上传= data_in_bytes的总和WHERE user = ##和month = currentMonth

    此类任务的最佳做法是什么?

    问候

2 个答案:

答案 0 :(得分:1)

我会保留一个包含所有uploades的主日志表,然后在表中查询您想要的日期:

SELECT *
FROM logs
WHERE upload_date between to_date ('2003/01/01', 'yyyy/mm/dd')
AND to_date ('2003/12/31', 'yyyy/mm/dd');

答案 1 :(得分:1)

请问为什么你需要一个单独的group_uploads表?

为什么不使用具有如下模式的表:uploads(user_id,group_id,filename,type,size,date)。如果允许用户为自己上传文件(不与组相关联),则“group_id”可以为NULL,并且“type”可以是“video”或“image”。如果您想添加其他文件类型(文档,mp3等),这种方法似乎更灵活一些。

使用此模式,对各种过滤器的查询(按用户,用户而非按组,用户和组,按类型,按日期过滤)应该更简单。

希望有所帮助。