【发布时间】:2010-10-13 21:11:27
【问题描述】:
首先,这是创建“玩家历史”的查询 它可以根据需要随时执行,并且只会在没有昨天的历史记录行或自过去最新的历史记录条目后值发生更改时为玩家创建新的历史记录行。
INSERT INTO `player_history` (`player_id`, `date`, `races`, `maps`, `playtime`, `points`)
SELECT `p`.`id`, DATE_SUB(NOW(), INTERVAL 1 DAY), `p`.`races`, `p`.`maps`, `p`.`playtime`, `p`.`points`
FROM `player` `p`
WHERE `p`.`playtime` IS NOT NULL
AND `p`.`playtime` > 0
AND (
SELECT `player_id`
FROM `player_history`^
WHERE `player_id` = `p`.`id`
AND (
`date` = DATE_SUB(NOW(), INTERVAL 1 DAY)
OR (
`date` < DATE_SUB(NOW(), INTERVAL 1 DAY)
AND `races` = `p`.`races`
AND `points` = `p`.`points`
AND `maps` = `p`.`maps`
AND `playtime` = `p`.`playtime`
)
)
ORDER BY `date` DESC
LIMIT 1
) IS NULL;
现在的问题是我还想使用单个查询来清理历史记录表。这已经选择了所有早于 10 天但最新的历史记录条目。但我不能像做 DELETE 而不是 SELECT *。
SELECT *
FROM `player_history` `ph`
WHERE `date` < DATE_SUB(NOW(), INTERVAL 10 DAY)
AND `date` != (SELECT `date`
FROM `player_history`
WHERE `player_id` = `ph`.`player_id`
ORDER BY `date` DESC
LIMIT 1);
那么是一种使用单个删除查询来做我想做的事情的方法吗?
【问题讨论】:
标签: mysql