2014-10-16 84 views
1

我想寫一個SQL查詢,但我不斷收到一個錯誤,我不知道什麼可能是錯誤的。我閱讀手冊併爲其搜索了很多,但我無法完成它的工作。MySQL比較時間戳記給出錯誤

查詢:

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

這一直給錯誤SQL錯誤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

您需要使用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 
+0

謝謝。問題確實是WHERE和ORDER BY的錯誤順序 – Paul 2014-10-16 12:31:56