Php 如何获取MySQL中的每n行?
我有一个表,其中包含每分钟记录的数据,因此每分钟有一行。当返回数据进行处理时,在过去6小时内需要此精度,但在这之后,较低的精度就足够了,例如每5分钟一次 我可以将所有数据返回到一个数组中,然后删除除第5个元素以外的所有元素,但这需要所有数据由MySQL返回,然后首先读取到数组中——相当多的数据 如何在MySQL中每第n行返回一次?我读过一篇博客文章,其中建议使用primaryKey%5=0,其中primaryKey是自动递增的,但是 a) 不使用索引 b) 将只返回可被5整除的primaryKey值,在删除的情况下,实际上可能不是每5行返回一次 这可以在SQL查询中完成,还是需要使用游标逐行循环结果集Php 如何获取MySQL中的每n行?,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个表,其中包含每分钟记录的数据,因此每分钟有一行。当返回数据进行处理时,在过去6小时内需要此精度,但在这之后,较低的精度就足够了,例如每5分钟一次 我可以将所有数据返回到一个数组中,然后删除除第5个元素以外的所有元素,但这需要所有数据由MySQL返回,然后首先读取到数组中——相当多的数据 如何在MySQL中每第n行返回一次?我读过一篇博客文章,其中建议使用primaryKey%5=0,其中primaryKey是自动递增的,但是 a) 不使用索引 b) 将只返回可被5整除的primaryKe
我正在用PHP连接数据库。完全未经测试,但这可能有效
SELECT Row, col_a
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1
WHERE Row%5 = 0;
每5分钟的时间戳列表:
SELECT
MIN(logtimestamp) AS first_of_five_minutes
FROM tLog
GROUP BY
DATE(logtimestamp),
HOUR(logtimestamp),
MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5)
现在,您可以使用它作为子选择,通过将logtimestamps
连接到上的first\u of五分钟
来获取请求的日志条目。当然,额外的WHERE
-子句必须在内部和外部复制,以便获得“正确”的时间戳
另外,请注意,这会在每五分钟的间隔内返回第一个时间戳,而直接使用
minutes%5=0
的解决方案只返回实际为:05倍数的日志项,如果记录日志或类似内容有延迟,则可能会失败。它是否返回没有where子句的任何内容?很抱歉,我目前无法访问mysql,因此无法在我的末尾对其进行测试:(它返回每一行,但没有WHEREThat似乎不起作用-它只是列出了所有行。但是,我将其改编为此,它确实起作用-从表WHERE MINUTE(logtimestamp)中选择logtimestamp)%5=0注意:我将时间值存储为Unix时间戳,因此需要使用FROM_UNIXTIME。我集成了部分注释。