Php 如何从MySQL获取过去7天的行?

Php 如何从MySQL获取过去7天的行?,php,mysql,pdo,Php,Mysql,Pdo,如何从表articles中获取过去7天的行? 每行都有一个值timestmp,其中时间是通过time()设置的。 我试过这个: SELECT COUNT(*) FROM `articles` WHERE `timestmp`>NOW()-INTERVAL 168 HOUR 这对我不起作用:( 表格如下: CREATE TABLE `articles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `link` text N

如何从表
articles
中获取过去7天的行? 每行都有一个值
timestmp
,其中时间是通过time()设置的。 我试过这个:

SELECT COUNT(*) FROM `articles` WHERE `timestmp`>NOW()-INTERVAL 168 HOUR
这对我不起作用:(

表格如下:

CREATE TABLE `articles` (
`id`        int(11) NOT NULL AUTO_INCREMENT,
`link`          text NOT NULL,
`article_name`  text NOT NULL,
`descript`      text NOT NULL,
`preview`       text NOT NULL,
`content`       text NOT NULL,
`category`      int(11) NOT NULL,
`author`        text NOT NULL,
`keywrds`       text NOT NULL,
`timestmp`      int(11) NOT NULL,
`modified`      int(11) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT (`keywrds`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

预期的输出是过去7天的所有文章,包括名称、描述等。

您的
timestmp
列应该存储一个UNIX时间戳,它是自1970年1月1日UNIX纪元开始以来的秒数。因此,如果您只想要恰好在过去7天内发生的记录,那么您可以只需从
timestmp
列中减去7天(以秒计):

SELECT COUNT(*) AS cnt
FROM articles
WHERE timestmp > UNIX_TIMESTAMP() - 7*24*60*60;
相反,如果您想要7天前的记录,包括整个第一天的记录,那么我们需要做更多的工作。在这种情况下,我们必须计算第一天的午夜,然后将其转换为UNIX时间戳

SELECT COUNT(*) AS cnt
FROM articles
WHERE timestmp > UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 7 DAY))

它不是重复的主题是关于类型为
date
的列将示例数据添加到您的问题和预期输出中。我认为您可以很容易地从我提供的重复链接中调整查询。好的。我已经更新了它
timestmp
列中存储的值是什么?它们是UNIX时间戳吗?请提供数据用我应该使用的行设置数组?从timestmp>UNIX\u时间戳的文章中选择*(从\u UNIXTIME(timestmp)-间隔7DAY@Mr.Tom事实上,我犯了错误,因为您的查询比这更容易完成。我还为您提供了第二个选项,以防您希望包含从第一天午夜开始的所有7天。Tim,我无法获取它。要获取包含行的数组,我是否应该使用此查询而不使用count()?哦……是的,只需使用文章表中的
SELECT*
。但这也会为您提供除所有行之外的所有列,并且可能您不需要这些。如果您只需要某些列,则只需执行
SELECT col1、col2、