如何从过去7天获取MySQL记录,但只有具有记录的天数,并将每天作为记录返回?

时间:2013-06-15 23:58:39

标签: php mysql

说我有一个简单的mysql表,列id,标题,日期。每天可以有多行,但每个日都有一行。例如,可能有5行,6月15日作为日期,但是以6月14日为零的零行作为日期。我怎样才能获得过去7天的所有结果,不包括6月14日,因为它没有行。所以我不只是从当前日期减去7天。我想只获得过去7天的任何行。

然后我希望将每一天作为单个结果返回,例如按日期分组,但是按时间戳的年/月/日部分返回,这样我得到的结果只有7个结果,每个结果都像一组单独的行。

我希望这是有道理的。有什么想法吗?

编辑: 我意识到我能做到这样的事情:

WHERE Date BETWEEN DATE_SUB( NOW(), INTERVAL DATEDIFF( NOW(), (SELECT Date FROM test GROUP BY Date LIMIT 7,1 ) ) DAY ) and NOW()

但这会产生SQL语法错误。我要做的是一个子查询和按日期分组以获得每天一个结果,并从偏移量7开始返回一个结果,然后对其进行DATEDIFF以得到{{{ 1}}应放入DATE_SUB

2 个答案:

答案 0 :(得分:1)

您将无法将同一天的结果作为数组返回,但您可以按日期对其进行分组,标题以逗号分隔:

SELECT GROUP_CONCAT(title) AS titles, date 
FROM test 
WHERE date > DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY date;

然后在PHP中,执行以下操作:

foreach ($results as $row)
{
    echo $row['date'];
    foreach ($row['titles'] as $title)
    {
        echo $title;
    }
}

答案 1 :(得分:0)

想出来:它有效!

WHERE Date BETWEEN DATE_SUB(NOW(), INTERVAL (DATEDIFF( NOW(), (SELECT Date FROM test GROUP BY Date ORDER BY Date DESC LIMIT 8,1 ) ) ) DAY) and NOW()

我错过了一个括号,我不得不在子查询中添加ORDER BY和DESC。