Php 以月为单位限制用户操作

Php 以月为单位限制用户操作,php,mysql,Php,Mysql,我的用户上传照片和mysql中记录的所有上传的日期信息。我想在几个月内限制上传。用户可以在一个月内上传3张图片。最好的方法是什么 干杯一个可能的解决方案: 有一个用户id和月份的表格 每次用户上传照片时,增加该用户当月的数量 然后在上传照片的页面上检查当月的值是否小于3。如果它是允许上传,如果它等于3,则显示“您已使用完本月的上传”消息 如果您还包括一个与每个用户关联的“最大上载”字段,则在必要时,您可以允许某些用户更多上载,而允许其他用户更少上载,或者在带宽允许的情况下增加限制。未测试: SE

我的用户上传照片和mysql中记录的所有上传的日期信息。我想在几个月内限制上传。用户可以在一个月内上传3张图片。最好的方法是什么

干杯

一个可能的解决方案:

有一个用户id和月份的表格

每次用户上传照片时,增加该用户当月的数量

然后在上传照片的页面上检查当月的值是否小于3。如果它是允许上传,如果它等于3,则显示“您已使用完本月的上传”消息

如果您还包括一个与每个用户关联的“最大上载”字段,则在必要时,您可以允许某些用户更多上载,而允许其他用户更少上载,或者在带宽允许的情况下增加限制。

未测试:

SELECT COUNT(*) FROM photos WHERE user="bob" AND createdAt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
该查询应返回名为bob的用户在上个月创建的
photos
表中的行数(根据
createdAt
字段)。将其与
3
进行比较,以了解是否允许他们上传内容。

您所说的“月限”是什么意思?你的意思是“过去30天的限额”,还是“每个月的第一天重新设置限额”

对于第一种情况:只需选择当前用户在上个月创建的图片数量。如果此数字>=3,则拒绝用户上载的权利

SELECT COUNT(*) FROM <pictures_table> 
WHERE <upload_date_field> >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 
AND <user_field> = <current_user>
从中选择计数(*)
其中>=日期(CURDATE(),间隔1个月)
和=
我应该提到,您可以在应用程序的不同层上实现此逻辑,但这取决于您。

使用:

  SELECT YEAR(t.ur_date_field) AS yr,
         MONTH(t.ur_date_field) AS month_number,
         COUNT(*) AS num_photos
    FROM UR_TABLE t
GROUP BY YEAR(t.ur_date_field), MONTH(t.ur_date_field)
ORDER BY yr, month_number
…获得:

yr    |  month_number  |  num_photos
--------------------------------
2010  |  1             |  2
2010  |  2             |  1
如果一个月内没有任何照片,它将不会显示在结果集中


从那里,您可以特别验证月份。

但这将限制它在当前日期的1个月以内,我需要在2月、4月、6月等月份执行此操作…我的意思是“每个月的第一个月重置限制”