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

时间:2010-08-18 05:30:08

标签: php mysql timestamp

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

所以,我有一个特别庞大的查询,它返回线程信息,包括它首次发布的日期,上次发布的日期(如果有的话)以及当前最后查看的日期登录用户(如果存在这样的日期。

然后查询返回三个值:

  • firstPostDate
  • lastPostDate
  • lastViewDate

我需要检查的是,如果firstPostDate或lastPostDate比lastViewDate更新,那么将该线程标记为新的/具有未读回复。

我在PHP中执行此操作时遇到问题,因为我的日期都存储为MySQL中的时间戳。起初我以为我可以使用UNIX_TIMESTAMP返回一个Unix时间戳,然后比较它们,但我不相信我得到了正确的结果(因为时间戳是YMD HMS格式(或者类似,我不记得了)我的头顶。)

我在网站上有其他查询比较两个日期,这看起来效果很好。有没有办法可以比较mysql查询中的两个或三个日期,如果是新的则返回“YES”,如果不是,则返回“NO”?它会使我的PHP标记更简单。

或者我是以错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以将表达式用作结果集中的附加字段:

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)