我的数据库中users_added
有一个名为的表,该表中有一个名为的字段expire
,用于存储unix时间戳。
我的问题是,我该如何循环x天数,并查看用户还剩下多少天(直到达到到期日期)
例子:
1 day remaining:
10 users
2 days remaining:
0 users
3 days remaining
50 users
等,等等。
图形示例:
这是我到目前为止所拥有的:
// Start date
$date = date("Y-m-d",$time);
// End date
$end_date = date('Y-m-d', strtotime($date . " +10 days"));
while (strtotime($date) <= strtotime($end_date)){
$stmt = $dbh->prepare("SELECT * FROM users_added WHERE user_by=:user AND expire<:time");
$stmt->bindParam(":user",$userdata['username']);
$stmt->bindParam(":time",$end_date);
$stmt->execute();
$expireData = $stmt->fetchAll();
$remaining = $date-$end_date;
echo "$remaining";
echo "day(s) remaining:";
$date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
}
我被困住了,无法真正走得更远。我不知道该如何实现。
这为我工作:
mysql> CREATE TABLE users (expiry INT UNSIGNED);
Query OK, 0 rows affected (0.12 sec)
mysql> INSERT INTO users (expiry) VALUES
(UNIX_TIMESTAMP() + 1000),
(UNIX_TIMESTAMP() + 12348),
(UNIX_TIMESTAMP() + 89284),
(UNIX_TIMESTAMP() + 99438),
(UNIX_TIMESTAMP() + 333552),
(UNIX_TIMESTAMP() + 883718),
(UNIX_TIMESTAMP() + 994872);
Query OK, 7 rows affected (0.05 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> SELECT
ROUND((expiry - UNIX_TIMESTAMP()) / 86400) AS days,
COUNT(*) AS cnt
FROM users
WHERE expiry > UNIX_TIMESTAMP()
GROUP BY days;
+------+-----+
| days | cnt |
+------+-----+
| 0 | 2 |
| 1 | 2 |
| 4 | 1 |
| 10 | 1 |
| 12 | 1 |
+------+-----+
5 rows in set (0.00 sec)
mysql>
只需让数据库完成工作即可;从当前时间戳减去到期时间戳可以得到到期前的秒数,再将其除以86400可得到天数。然后,您可以将结果按天数分组,以获取每天的计数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句