Php 比较mysql中的两个时间戳,然后返回一个自定义字段

Php 比较mysql中的两个时间戳,然后返回一个自定义字段,php,mysql,timestamp,Php,Mysql,Timestamp,我正在用PHP构建一个小规模的论坛脚本,我很难演示给定线程的读/未读状态 因此,我有一个特别庞大的查询,它返回线程信息,包括它第一次发布的日期、最后一次发布的日期(如果有)以及当前登录用户最后一次查看它的日期(如果有) 然后,查询返回三个值: 第一个过期日期 最后日期 最后查看日期 我需要检查的是,如果firstPostDate或lastPostDate比lastViewDate更新,则将该线程标记为新线程/具有未读回复 我在PHP中执行此操作时遇到问题,因为我的日期都以时间戳的形式存储在M

我正在用PHP构建一个小规模的论坛脚本,我很难演示给定线程的读/未读状态

因此,我有一个特别庞大的查询,它返回线程信息,包括它第一次发布的日期、最后一次发布的日期(如果有)以及当前登录用户最后一次查看它的日期(如果有)

然后,查询返回三个值:

  • 第一个过期日期
  • 最后日期
  • 最后查看日期
我需要检查的是,如果firstPostDate或lastPostDate比lastViewDate更新,则将该线程标记为新线程/具有未读回复

我在PHP中执行此操作时遇到问题,因为我的日期都以时间戳的形式存储在MySQL中。起初我认为可以使用UNIX_时间戳返回UNIX时间戳,然后比较它们,但我不相信我得到了正确的结果(因为时间戳是Y-m-D H-m-S格式的)(或者类似的,我记不得了)

我在网站上还有其他比较两个日期的查询,看起来效果不错。有没有一种方法可以比较mysql查询中的两个或三个日期,如果是新的,则返回“是”,如果不是,则返回“否”?这将使我的PHP标记更简单


还是我的做法不对?

您可以在结果集中使用表达式作为附加字段:

SELECT   ...
         (firstPostDate > lastViewDate OR lastPostDate > lastViewDate) AS unread
FROM     posts;
当线程为新线程/具有未读回复时,
unread
字段应为
1
,否则为
0

测试用例:

CREATE TABLE posts (
    id int, 
    firstPostDate timestamp, 
    lastPostDate timestamp, 
    lastViewDate timestamp
);

INSERT INTO posts VALUES (1, '2010-01-01 12:00', '2010-01-02 12:00', '2010-01-03 12:00');
INSERT INTO posts VALUES (2, '2010-01-03 12:00', '2010-01-05 12:00', '2010-01-04 12:00');
INSERT INTO posts VALUES (3, '2010-01-06 12:00', '2010-01-06 12:00', '0000-00-00 00:00');
INSERT INTO posts VALUES (4, '2010-01-07 12:00', '2010-01-07 12:00', '2010-01-08 12:00');
结果:

SELECT   id,
         (firstPostDate > lastViewDate OR lastPostDate > lastViewDate) AS unread
FROM     posts;

+------+--------+
| id   | unread |
+------+--------+
|    1 |      0 |
|    2 |      1 |
|    3 |      1 |
|    4 |      0 |
+------+--------+
4 rows in set (0.01 sec)

谢谢。看起来很可靠,我会试试这个然后再给你回复。非常感谢!我使用的字段(firstPostDate等)都是别名,所以我花了一点时间思考并重新编写我的查询以获得所需的结果,但是你的代码片段对回答我的问题很有帮助。非常感谢!