php - 使用 MySQL 和 PHP 计算错误

标签 php mysql sql unix-timestamp

我正在制作一个程序来计算统计页面数据库中的日志,我的查询计算每个月有多少日志。问题是我计算了日志,我的数字和数据库给我的数字之间存在计数差异。我把数据分解了,这样会更容易阅读。也许我做错了查询,但这是我现在能想到的最好的。也许有人可以解决这个问题,或者让我知道我做错了什么。

查询

select distinct FROM_UNIXTIME(log_date,"%M, %Y") AS month, count(*) as numberOfVisits
from support.support_logs
group by month
order by log_date desc;

输出

month           numberOfVisits
"March, 2015"       2
"February, 2015"    5
"January, 2015"     11
"December, 2014"    18
"November, 2014"    19
"October, 2014"     5

数据

PHP time()  Converted to readable
1413849800  2014-10-21 00:03:20
1413849800  2014-10-21 00:03:20
1413849800  2014-10-21 00:03:20
1413936200  2014-10-22 00:03:20
1413936200  2014-10-22 00:03:20

1414973000  2014-11-03 00:03:20
1414973000  2014-11-03 00:03:20
1414973000  2014-11-03 00:03:20
1414973000  2014-11-03 00:03:20
1415750600  2014-11-12 00:03:20
1415750600  2014-11-12 00:03:20
1415837000  2014-11-13 00:03:20
1416096200  2014-11-16 00:03:20
1416096200  2014-11-16 00:03:20
1416096200  2014-11-16 00:03:20
1416096200  2014-11-16 00:03:20
1416096200  2014-11-16 00:03:20
1416096200  2014-11-16 00:03:20
1416701000  2014-11-23 00:03:20
1416701000  2014-11-23 00:03:20
1416701000  2014-11-23 00:03:20
1416701000  2014-11-23 00:03:20
1416701000  2014-11-23 00:03:20

1417392200  2014-12-01 00:03:20
1418342600  2014-12-12 00:03:20
1418342600  2014-12-12 00:03:20
1418342600  2014-12-12 00:03:20
1418429000  2014-12-13 00:03:20
1418429000  2014-12-13 00:03:20
1418429000  2014-12-13 00:03:20
1418429000  2014-12-13 00:03:20
1418429000  2014-12-13 00:03:20
1418429000  2014-12-13 00:03:20
1418429000  2014-12-13 00:03:20
1418429000  2014-12-13 00:03:20
1419033800  2014-12-20 00:03:20
1419033800  2014-12-20 00:03:20
1419465800  2014-12-25 00:03:20
1419465800  2014-12-25 00:03:20
1419465800  2014-12-25 00:03:20
1419465800  2014-12-25 00:03:20
1419984200  2014-12-31 00:03:20

1420589000  2015-01-07 00:03:20
1420589000  2015-01-07 00:03:20
1420589000  2015-01-07 00:03:20
1420589000  2015-01-07 00:03:20
1420589000  2015-01-07 00:03:20
1421885000  2015-01-22 00:03:20
1421971400  2015-01-23 00:03:20
1421971400  2015-01-23 00:03:20
1421971400  2015-01-23 00:03:20
1422317000  2015-01-27 00:03:20
1422317000  2015-01-27 00:03:20

1423267400  2015-02-07 00:03:20
1423267400  2015-02-07 00:03:20
1423267400  2015-02-07 00:03:20
1423267400  2015-02-07 00:03:20

1425168200  2015-03-01 00:03:20
1426118600  2015-03-12 00:03:20
1426118600  2015-03-12 00:03:20

最佳答案

如果您使用 UNIX_TIMESTAMP() 和 FROM_UNIXTIME() 在 TIMESTAMP 值和 Unix 时间戳值之间进行转换,转换是有损的,因为映射在两个方向上不是一对一的。详情参见UNIX_TIMESTAMP()函数的说明。 这意味着

1425168200  2015-03-01 00:03:20

上面的值是一个例子,你的 mysql 服务器在 3 月 1 日读取的 unix_timestamp 是有损的,而在其他时区仍然是 2 月 28 日

解决方案是更改 MySQL 或 PHP 上的时区,以便两台服务器上的日期时间保持一致

关于php - 使用 MySQL 和 PHP 计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29335493/

相关文章:

php - 动态 SQL 插入查询

php - 文件分块上传时的ffmpeg实时编码

javascript - 我想使用文件上传选项将多个图像路径保存到 mysql 数据库?我正在使用一个将其他数据输入数据库的表单

mysql - UPDATE 的目标表不可更新

PHP 数组条件不起作用

mysql - 如何在 mysql 数据库中创建 TINYINT(1) 数据类型?

mysql - App.config MySQL VB.Net 上有 2 个或更多 ConnectionString

sql - 在 SQL Server 中使用纯 SQL 在数据库之间复制 BLOB 值

mysql - sql:如果两行有重复的id,只保留最小值

php - MySQL表结构。使用 PHP 时哪个效率更高