MySQL比较时间戳给出了错误

时间:2014-10-16 12:25:37

标签: mysql

我试图写一个SQL查询,但我一直收到错误,我不知道可能出现什么问题。我阅读了手册并搜索了很多内容,但我无法正常使用。

查询:

SELECT appid
FROM steam_app
ORDER BY last_update, appid
WHERE last_update < '2014-10-16 01:01:01'

这不断给出错误SQL Error 1064,SQL语法。 现在我知道错误在WHERE行上。因为如果我删除它,一切都很好。

解决方案:问题是WHERE和ORDER BY的顺序。应该在ORDER BY之上。

我最终想要的是一个类似的查询:

SELECT appid
FROM steam_app
ORDER BY last_update, appid
WHERE last_update < NOW() + INTERVAL 7 DAY

我的数据库:

CREATE TABLE `steam_app` (
    `appid` INT(10) UNSIGNED NOT NULL,
    `name` VARCHAR(128) NULL DEFAULT NULL,
    `type` VARCHAR(64) NULL DEFAULT NULL,
    `header_image` VARCHAR(256) NULL DEFAULT NULL,
    `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `last_change` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`appid`),
    INDEX `type` (`type`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

示例数据

INSERT INTO `steam_app` (`appid`, `name`, `type`, `header_image`, `last_update`, `last_change`) VALUES (327400, 'Sid Meier\'s Colonization (Classic)', 'game', 'http://cdn.akamai.steamstatic.com/steam/apps/327400/header.jpg?t=1412883714', '2014-10-16 13:36:37', '2014-10-16 13:36:37');
INSERT INTO `steam_app` (`appid`, `name`, `type`, `header_image`, `last_update`, `last_change`) VALUES (327650, 'May’s Mysteries: The Secret of Dragonville', 'game', 'http://cdn.akamai.steamstatic.com/steam/apps/327650/header.jpg?t=1413366276', '2014-10-16 13:36:37', '2014-10-16 13:36:37');
INSERT INTO `steam_app` (`appid`, `name`, `type`, `header_image`, `last_update`, `last_change`) VALUES (327860, 'Salt', 'game', 'http://cdn.akamai.steamstatic.com/steam/apps/327860/header.jpg?t=1413399075', '2014-10-16 13:31:53', '2014-10-16 13:31:53');

1 个答案:

答案 0 :(得分:1)

您需要使用date_add功能。此外,order by子句位于where子句之后:

SELECT   last_update, appid
FROM     steam_app
WHERE    last_update < DATE_ADD(NOW(), INTERVAL 7 DAY)
ORDER BY last_update, appid
相关问题