我正在使用一个应用程序,该应用程序使用phpActiveRecord
和mySQL从传感器网络中获取数据并将其绘制到客户端上的一些flot.js图形上。返回SQL查询的每第二行
用户可以选择多个时间范围来影响图表显示的数据范围。 2hrs, 24hrs, 3 days and 1 week.
传感器每隔60秒发送一次数据到数据库,因此当绘制图表时,查询会在now and DATE_SUB(CUR_DATE - INTERVAL ? DAY)
之间的所有行中拉动,其中?是1,3或7等
然而,这导致大量的行被返回(60,000 + for the full week!)
并导致巨大的延迟和服务器错误。
我知道我可以大量增加php.ini
文件中可用于查询的最大内存,但这不是一个好的解决方案,也不能解决速度问题。
我的问题是,有没有一种方法可以根据用户希望查看的时间间隔的长度,轻松地从所需的日期范围中选择每第二或第三行?
在C或Java中,我会做一些模数select来返回交替行,但我想不出在当前框架中做到这一点的方法。
任何想法,将不胜感激。谢谢。
http://stackoverflow.com/questions/858746/how-do-you-select-every-n-th-row-from-mysql –
谢谢乔希,这些都是很棒的链接,但不幸的是,应用程序的方式是结构化和动态生成意味着用户变量的使用基本上不存在问题。查询由slim.js路由框架管理,不直接由浏览器页面调用。虽然我很感激!谢谢。 – bisslad
如果你的id是递增的,你可以使用它(添加一个“奇数”,或者是4/8的倍数,等等等于你的WHERE语句) 另外:你有没有考虑过为你的querys使用缓存?即使你可能简单地使用mysql_result_cache,你也会提高你的性能。 –