1

我希望有人可以帮助处理似乎并没有完全按照我需要的方式执行的 MySQL 查询。

客户要求我改进他们网站登录页面的更新系统。目前,更新系统允许他们提供2有关站点最近更改的快速行条目。他们这样做是将数据输入 HTML 表单并将数据加载到 MySQL 数据库中。

目前,该系统仅使用“已创建”列,该列TIMESTAMP设置为CURRENT_TIMESTAMP. 我在表中添加了一个名为 postdate 的列。Postdate 对 null 友好TIMESTAMP,通过PHP和设置值HTML

到目前为止,这一切都相当简单(并且特定于我的项目)。这对我来说很奇怪:

给定表格规格为:

CREATE TABLE `updates` (
  `update` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `comment` text,
  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `status` int(11) DEFAULT '1',
  `gallery` int(11) DEFAULT NULL,
  `website` int(11) DEFAULT NULL,
  `covers` int(11) DEFAULT NULL,
  `resume` int(11) DEFAULT NULL,
  `calendar` int(11) DEFAULT NULL,
  `postdate` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`update`)
) ENGINE=InnoDB 

为什么要查询:

select updates.name, updates.comment, updates.status, updates.gallery, updates.website, 
                    updates.covers, updates.resume, updates.calendar, 
                    ifnull(postdate, updates.created) as `created`
                from angela.updates
                where updates.status = 1
                and updates.created <= now()
                order by `updates`.`created` desc
        limit 15;

返回以下时间戳顺序:

2012-10-15 00:00:00
2013-12-25 00:00:00
2012-12-25 00:00:00
2013-02-01 00:00:00
2013-01-20 13:48:48
2013-01-20 13:36:44
2013-01-20 12:59:57
2013-01-20 12:56:35
2013-01-20 12:49:20
2012-10-29 11:00:12
2012-10-24 14:10:13
2012-08-14 23:53:53
2012-08-14 23:53:18
2012-08-14 23:50:34
2012-08-14 23:50:08

请注意,从 Postdate 列中提取没有特定时间的行,而从 Created 列中提取具有特定时间值的值。

MySQL 时间比较肯定有某种微妙之处,我只是在这里没有理解。

任何帮助将不胜感激,我为此放弃了互联网。

4

0 回答 0