我有一个 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/