从最早7天的数据库行中删除

时间:2014-01-28 13:31:00

标签: php mysql delete-row

我的MySQL查询有问题。

我想从我的表中查询最早7天的删除行。此表在不同的行中包含daymonthyear

这是我的疑问:

DELETE FROM 
  `logowanie_dj` 
WHERE 
  `miesiac` 
IN (
  SELECT CONCAT(dzien,':', miesiac,':', rok) < 21:1:2014'
)

但是mysql_query()正在删除所有行。

5 个答案:

答案 0 :(得分:1)

我认为你的意思是年,月和日是不同的

然后这可能有效:

DELETE FROM `logowanie_dj` WHERE CAST(CONCAT(dzien,':',miesiac,':',rok) AS DATE) < CAST('21:1:2014' AS DATE)

它会从行的单元格中以dd:mm:yyyy格式创建日期值,如果它在21:1:2014之前,则将其删除。

请注意,您显然使用的是非英语的日期格式。 MySQL可能有问题,所以你可能需要这样做:

DELETE FROM `logowanie_dj` WHERE CAST(CONCAT(rok,'-',miesiac,'-',dzien) AS DATE) < CAST('2014-01-21' AS DATE)

答案 1 :(得分:1)

检查日期和时间格式是否正确。试试这种格式&#39; yyyy:mm:dd hh:mm:ss&#39;

答案 2 :(得分:0)

您可能希望尝试将两个字符串转换为日期,以便它知道将比较作为日期。

  

“为了在将BETWEEN与日期或时间值一起使用时获得最佳结果,请使用CAST()将值显式转换为所需的数据类型。示例:如果将DATETIME与两个DATE值进行比较,请将DATE值转换为DATETIME值。如果在与DATE的比较中使用字符串常量(如“2001-1-1”),则将字符串强制转换为DATE。“

Source

答案 3 :(得分:0)

*在尝试此<* strong>

之前备份您的数据库
DELETE FROM `logowanie_dj` 
WHERE ABS(UNIX_TIMESTAMP()-UNIX_TIMESTAMP(CONCAT(rok,'-',miesiac,'-',dzien))) > 604800

答案 4 :(得分:-1)

尝试使用以下代码

    DELETE FROM 
  `logowanie_dj` 
WHERE 
  `miesiac` 
IN (
  SELECT CONCAT(dzien,':', miesiac,':', rok) < '2014:01:21 00:00:00'
)