如何删除任何超过 x 天的 SQL 行,而 (列)排名为 x


How would one delete any SQL row that is older than x amount of days while (column)Rank is x?

我设置了一个排名系统,其中5是管理员,4是终身捐赠者,3是捐赠者,2是广告商,1是用户。
我不知道如何刷新所有行:
-如果他们是用户,则为一周(排名:1)
-如果他们是广告商,则为两周(排名:2)
-2个月大,如果他们是捐赠者(排名:3)

同时将所有管理员和终身捐助者保留在表中。

任何帮助将不胜感激。

像这样的东西就可以了:

DELETE 
FROM Test
WHERE (TestDate < NOW() - INTERVAL 1 WEEK AND Rank = 1) 
      OR (TestDate < NOW() - INTERVAL 2 WEEK AND Rank = 2) 
      OR (TestDate < NOW() - INTERVAL 2 MONTH AND Rank = 3) 

尚未测试。在运行此查询以测试它是否删除正确的数据而不是删除之前,请放置 SELECT 并查看出现哪些行,然后运行此查询。

SELECT * FROM Test 
WHERE (TestDate < NOW() - INTERVAL 1 WEEK AND Rank=1)
  OR (TestDate < NOW() - INTERVAL 2 WEEK AND Rank = 2)
  OR (TestDate < NOW() - INTERVAL 2 MONTH AND Rank = 3) 

我可能会使用三个单独的查询来查询数据库并删除行。

第一个查询 - 对于排名 1(用户):

$query = "DELETE FROM table WHERE rank=1 AND time > UNIX_TIMESTAMP()-604800";

第二个查询 - 排名 2(广告客户):

$query = "DELETE FROM table WHERE rank=2 AND time > UNIX_TIMESTAMP()-1209600";

第三个查询 - 对于排名 3(捐赠者):

$query = "DELETE FROM table WHERE rank=3 AND time > UNIX_TIMESTAMP()-2592000";

我希望这有所帮助。

您需要在表中放置一列作为值 datetime,并使用以下 wuery 根据条件删除记录

CREATE TABLE IF NOT EXISTS `test` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`rank` int(10) NOT NULL,
`timestamp` datetime NOT NULL,
 PRIMARY KEY (`id`)
 )  
DElETE 
FROM test
WHERE (week( `timestamp` ) >= 1 AND Rank = 1) 
  OR (week( `timestamp` ) >= 2  AND Rank = 2) 
  OR (week( `timestamp` ) >= 4  AND Rank = 3)