php - 如何获取 MySQL 中的每 n 行?

标签 php mysql mysqli

我有一个表,其中包含每分钟记录的数据,所以我每分钟都有一行。当返回数据进行处理时,过去 6 小时内需要此精度,但之后,较低级别的精度就足够了,例如每 5 分钟一次。

我可以将所有数据返回到一个数组中,然后删除除第 5 个元素以外的所有元素,但这需要 MySQL 返回所有数据,然后先读入数组 - 相当多的数据。

如何在 MySQL 中返回每第 n 行?我读过this建议使用 primaryKey % 5 = 0 的博客文章,其中 primaryKey 是 auto_increment 但这

a) 不使用索引 b) 将仅返回可被 5 整除的主键值,并且在删除的情况下,实际上可能不是每 5 行一次

这可以只在 SQL 查询中完成,还是需要使用游标逐行循环遍历结果集?

我正在使用 MySQLi在 PHP 中连接到数据库。

最佳答案

每 5 分钟的时间戳列表:

SELECT
  MIN(logtimestamp) AS first_of_five_minutes
FROM tLog
GROUP BY
  DATE(logtimestamp),
  HOUR(logtimestamp),
  MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5)

现在,您可以将它用作子选择,通过将 logtimestamps 加入 .当然,必须在内部和外部复制额外的 WHERE 子句,以便您获得“正确”的时间戳。

另外,请注意,这会返回每五分钟间隔的第一个时间戳,而直接使用 minutes%5 = 0 的解决方案只会返回实际上是 :05 的倍数的日志记录,这可能会失败如果您在记录日志或类似方面有延迟。

关于php - 如何获取 MySQL 中的每 n 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502818/

相关文章:

php - 获取通知每当 MySQL 表在 PHP 中更新时没有任何刷新并且服务器上没有太多负载

php - 将现有应用程序迁移到什么是一个好的 PHP 框架?

PHP strlen() 函数在 Enterkey 计数中的异常行为

php - 我的插入查询失败了什么?

java - AWS rds - 如何从 Java 应用程序内的只读副本读取?

mysql - 如何在 SQL 中订购包括单词顺序

php - mySQL select查询,从多个表中获取数据

php - 在 PHP 中使用数组代替大量数据库查询

PHP/MySQLi - 循环数组以构建动态 WHERE 子句

javascript - 显示所选选项的按钮