php - 优化MYSQL、PHP搜索前几天这个时间的记录

标签 php mysql

我正在尝试获得优化的查询,以便在任何前一天的同一时间或几天内的同一时间为我提供结果。我能够通过在 PHP 上循环重复查询来解决它,该查询为我提供了特定日期的结果,但这需要很长时间。

我的 PHP 代码和 MYSQL 查询:

$json_data = array();
$i=$range;
while ($i>0){
  $result=mysql_query("SELECT numpeople, numviews, date FROM table_stats  ORDER BY ABS(date -  DATE_SUB(NOW(), INTERVAL '$i' DAY)) LIMIT 1", $conn);
  while($r = mysql_fetch_assoc($result)){
     $json_data[]= $r;
  }
  $i--;
}
print json_encode($json_data);
return;

最佳答案

在间隔中每一天的子选择中,我将计算您的表达式的最小值,并使用最小值将其连接回外部查询到您的统计表。唯一的问题是,如果您有多个具有最小差异的记录,那么所有记录都将被返回。

select numpeople, numviews, date
FROM table_stats
inner join
    (select date(date) dd, min(ABS(date -  DATE_SUB(NOW(), INTERVAL (datediff(curdate(), date)) DAY))) as mindiff
     from table_stats
     where date(date)<=curdate() - 1 and date(date)>=curdate() - interval $range day
     group by date(date)) t
         on t.dd=date(table_stats.date)
            and t.mindiff=ABS(table_stats.date -  DATE_SUB(NOW(), INTERVAL (datediff(curdate(), table_stats.date)) DAY))

abs() 表达式中,您可以使用 concat(date(date), ' ', time(now())) 而不是日期减法来获得前一天的同一时间。

关于php - 优化MYSQL、PHP搜索前几天这个时间的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40556281/

相关文章:

php - 对相关模型进行分页

mysql - COALESCE 与 SUM 与 Join 表的计算不正确

MySql 解释效率

mysql - 获取按某列排序的每个组的一条记录

php - 权威的 LEMP 堆栈官方 - Ubuntu 14.04

php - 将 XML 存储在数组中

php - Python 日志记录阻止来自 PHP 脚本的调用

php - 如何使实时服务器 Ratchet WebSockets 工作?

php - JQGrid,如何将 JSON 字符串发送到 PHP 进行处理并发送到数据库?

PHP - Symfony2.4 我可以在单个文件中包含多个类吗?