我正在根据MySQL database
从30 days ago
检索结果。这就是我在做的事情:
"SELECT * FROM archived_check_in WHERE client_id = :id AND DATE(check_in_date) > DATE(DATE_SUB(NOW(), INTERVAL 30 DAY))"
现在我想知道如何从30 days ago
获得我的所有结果,但实际上也会在30 day period
内得到每天的结果。
最好的方法是什么?
更新:
好的,这是我想要回归的例子:
$j = 0;
$response = '';
$sql="SELECT * FROM archived_check_in WHERE client_id = :id AND DATE(check_in_date) > DATE(DATE_SUB(NOW(), INTERVAL 30 DAY)) ";
$sth=$DBH->prepare($sql);
$sth->execute(array(':id' =>$current_user->ID));
while($row = $sth->fetch(PDO::FETCH_ASSOC))
{
$i = 0;//<!-- used for that days total
$response["row"][$j]["y"] = $row['check_in_date'];
$response["row"][$j]["amount"] = $i + 1;
$i++;
}
$j++;
$response["row"][$j]...
代表each day
查找的30 day
。
答案 0 :(得分:1)
以下是您如何获得每日计数的示例:
SELECT COUNT(*) AS day_count, DATE(check_in_date) AS day
FROM archived_check_in
WHERE client_id = :id
AND DATE(check_in_date) > DATE(DATE_SUB(NOW(), INTERVAL 30 DAY))
GROUP BY DATE(check_in_date)
请注意,当您只需要一些内容时使用SELECT *
非常浪费。只要有可能,请选择仅您感兴趣的列。
由于这需要在每一行上单独运行DATE()
函数,因此在较大的数据集上会很慢。对于具有关联DATE
的此操作专门设置新INDEX
列的情况非常有用。