【问题标题】:Getting counting errors with MySQL and PHP使用 MySQL 和 PHP 获取计数错误
【发布时间】:2015-03-29 22:08:29
【问题描述】:

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

查询

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

【问题讨论】:

  • db中所有行的总和是多少?
  • 表中有60行,错误是二月和三月的数字,他们假设分别是4和3
  • 嗯,这是奇怪的行为。将此时间戳 1422748940 添加到您的数据库中,看看 1 月和 2 月之间是否会出现任何新问题
  • “2015 年 3 月”、2“2015 年 2 月”、“2015 年 2 月”5“2015 年 1 月”12“2014 年 12 月”18“2014 年 11 月”19“2014 年 10 月”5
  • 你看到了吗?就像我告诉过你的那样,你的系统将我的值解析为 1 月,而现在是 2 月

标签: php mysql sql unix-timestamp


【解决方案1】:

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

1425168200  2015-03-01 00:03:20

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

解决方案是在 MySQL 或 PHP 上更改时区,以便两台服务器上的 DateTime 一致

【讨论】:

    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多