说我有一个简单的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
答案 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。