php - phpmyadmin 和 php 中的不同结果 - 与日期时间有关?

标签 php mysql datetime phpmyadmin

我有一个 SQL 查询,当通过 phpmyadmin 和我的脚本运行时,结果不同。我的查询使用相对时间,但我认为 UTC 时间是通用的?即使它们是基于服务器的,它们也会在同一台服务器上运行。

这是sql:

SELECT id, question_text, 
(CASE WHEN (start_time = 0 OR start_time > UTC_TIMESTAMP) THEN 'unasked' 
WHEN start_time < UTC_TIMESTAMP AND (end_time = 0 OR end_time > UTC_TIMESTAMP) THEN 'in-progress' 
WHEN start_time < UTC_TIMESTAMP AND end_time < UTC_TIMESTAMP THEN 'completed' 
ELSE 'unknown' END) AS status 
FROM `questions` WHERE survey_id = 1

phpmyadmin 的结果是:

1 什么是你最喜欢的颜色? 完成

2 世界上最可爱的动物是什么? 完成

但是我脚本的结果是:

Array ( [id] => 1 [question_text] => What is your favorite color? [status] => completed ) Array ( [id] => 2 [question_text] => What is the cutest animal in the world? [status] => unknown )

有问题的第二个元素/元素有开始日期:2016-04-30 15:20:00 和结束日期: 2016-10-13 20:40:35。

最佳答案

因为表列是 DATETIME ,您应该与 NOW() 进行比较,这是服务器时区中作为日期时间的当前时间。

SELECT id, question_text, 
       (CASE WHEN (start_time = 0 OR start_time > NOW()) THEN 'unasked' 
             WHEN (end_time = 0 OR end_time > NOW()) THEN 'in-progress' 
             ELSE 'completed') AS status 
FROM `questions` WHERE survey_id = 1

我还简化了 WHEN表达式。由于它们是按顺序尝试的,因此您无需检查 start_time < NOW()在第二个WHEN ,因为第一个已经处理了这种情况。因为你只测试了 >> , 如果其中一个时间正好是现在(> 的反面是 <= ,而不是 < ),它将失败并报告“未知”。通过所有这些简化,不可能出现未知案例。

关于php - phpmyadmin 和 php 中的不同结果 - 与日期时间有关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40030741/

相关文章:

php - MySQL表 'dbsql.cars'不存在?

mysql - 良好的登录系统数据库设计的唯一约束 ID?

php - 使用 PHP 制作 'facebook' 样式提要

php - 转义mysql查询中的单引号数据

mysql - 带有 sails-mysql 的水线 BIGINT 类型

javascript - 正确的时间显示

mysql select all 计算多行之间的差异到数据透视表的结果

python - Pandas:使用 `df.loc` 从 datetime64 到 int 的类型转换

PHP file_exists 不起作用

mysql - [运行时异常 : SqlMappingError(No rows when expecting a single one)]