Php 比较mysql中的两个时间戳,然后返回一个自定义字段
我正在用PHP构建一个小规模的论坛脚本,我很难演示给定线程的读/未读状态 因此,我有一个特别庞大的查询,它返回线程信息,包括它第一次发布的日期、最后一次发布的日期(如果有)以及当前登录用户最后一次查看它的日期(如果有) 然后,查询返回三个值:Php 比较mysql中的两个时间戳,然后返回一个自定义字段,php,mysql,timestamp,Php,Mysql,Timestamp,我正在用PHP构建一个小规模的论坛脚本,我很难演示给定线程的读/未读状态 因此,我有一个特别庞大的查询,它返回线程信息,包括它第一次发布的日期、最后一次发布的日期(如果有)以及当前登录用户最后一次查看它的日期(如果有) 然后,查询返回三个值: 第一个过期日期 最后日期 最后查看日期 我需要检查的是,如果firstPostDate或lastPostDate比lastViewDate更新,则将该线程标记为新线程/具有未读回复 我在PHP中执行此操作时遇到问题,因为我的日期都以时间戳的形式存储在M
- 第一个过期日期
- 最后日期
- 最后查看日期
还是我的做法不对?您可以在结果集中使用表达式作为附加字段:
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等)都是别名,所以我花了一点时间思考并重新编写我的查询以获得所需的结果,但是你的代码片段对回答我的问题很有帮助。非常感谢!