0

假设我有一个简单的 mysql 表,其中包含 id、title、date 列。每天可以有几行,但不是每天都有一行。例如,可能有 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对其进行操作以获得DATE_SUB应该放入的天数INTERVAL x DAYS

4

2 回答 2

2

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

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;
    }
}
于 2013-06-16T00:10:42.277 回答
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 添加到子查询中。

于 2013-06-17T02:31:47.103 回答