返回SQL查询的每第二行

时间:2013-11-15 11:09:59

标签: javascript php mysql flot phpactiverecord

我正在使用一个应用程序,该应用程序使用phpActiveRecord和mySQL从传感器网络中提取数据并将其绘制到客户端上的多个flot.js图上。

用户可以选择多个时间帧来影响图表显示的数据范围。 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中,我会做一些像模数选择来返回备用行但我想不出在当前框架中这样做的方法。

任何想法都将不胜感激。感谢。

4 个答案:

答案 0 :(得分:0)

<?
$row = 1;
WHILE QUERY {
    if ($row % 2 == 0) {
        echo "Yourstuff";
    } else {
        //Nothing
    }
    $row++;
}
?>

这应该可以帮助你思考一个解决方案......对你来说可能不是最完美的解决方案。但我希望它有所帮助......每三次使用$ row%3等等......

答案 1 :(得分:0)

尝试:

$i = 0;
foreach($row as $data){
  if($i == 1){
    //Do whatever with your 2n record
    $i++;
  }
  if($i > 1){$i = 0;} //Reset the counter
}

答案 2 :(得分:0)

每隔一秒返回也不是理想的解决方案。您可以使用缓存。

最简单的方法是将表缓存到另一个表。定期配置自动cron作业。

datas
datas_cache ( Only Results ) 

如果您想要更专业的解决方案,您需要将结果缓存到文件中,可以使用JSON

答案 3 :(得分:0)

最后,我最终设法选择上面指定的行。

然而,对于我遇到的问题,这不是一个可接受的解决方案,所以我决定尝试生成我的图形服务器端,以便尝试完全避免这个问题。在服务器上生成具有如此多数据点的图表并将图像向下推送到html5画布或其他类似物似乎是合乎逻辑的。要为此尝试pChart。感谢所有响应者。