一年内每天如何只使用一次查询获取数据?
Posted
技术标签:
【中文标题】一年内每天如何只使用一次查询获取数据?【英文标题】:How to use only one query to get the data every day within one year? 【发布时间】:2011-01-24 22:08:42 【问题描述】:我想在一年内每天获取数据,但我必须每天使用 365 次查询,例如:
for ($i = 0; $i<365; $i++)
$end_day = ...; // the end time of each day
$start_day = ...; // the start time of each day
$query = select count(*)....where created < $end_day AND created > $start_day
我认为我当前的解决方案使系统非常慢。有没有办法只使用一个查询?
【问题讨论】:
【参考方案1】:假设您创建的列是 DATETIME 或 TIMESTAMP,并且存储的数据比一天更细:
SELECT COUNT(*) ... GROUP BY YEAR(created), MONTH(created), DAY(created)
COUNT 是一个聚合函数,将应用于每个组,即每个组将有一行,该行将包含该组中的记录数。由于我们每天做了一个小组,这就是您想要的数据。
您不能只按 DAY(created) 分组,因为 DAY 返回月份中的某天,因此我们还需要输入月份和年份以确保日期是离散的。
您可能希望创建 WHERE > $start AND created
参考资料:
mysql Query GROUP BY day / month / year
http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html
【讨论】:
【参考方案2】:您可以使用 group by 子句。 http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html
如果您的日期有时间,则必须对其进行格式化以仅获取日期 (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format)
select count(*), created from my_table group by created
【讨论】:
【参考方案3】:如果它已经是日期时间列:
SELECT COUNT(*),DATE(created) as d ..... GROUP BY d;
如果存储为 unix 时间戳:
SELECT COUNT(*),DATE(FROM_UNIXTIME(created)) as d ..... GROUP BY d;
基本上,您可以使用 Mysql Date and Time functions 格式化列,以便从中获取日期,然后按这些日期分组以获得每个日期的计数。
【讨论】:
以上是关于一年内每天如何只使用一次查询获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 React hooks 和 redux 中只获取一次且不再获取数据
ReactJS:如何只调用一次 useEffect 挂钩来获取 API 数据