MySQL返回所选范围内的每第n条记录

时间:2011-06-09 04:09:11

标签: php mysql

  

可能重复:
  How do you select every n-th row from mysql

到目前为止,这是问题和我的方法。 我从表中有一个php mysql_query ,它可以包含2000到几百万行之间的任何内容。 我正在使用的JavaScript可视化库无法处理大于4-5千个元素的数组。所以我只是对每个第n个元素进行采样。 在php中我查询MySQL数据库的行数。如果该数字大于5000,我发送一种 $ query_every_n ,它将返回表格前两列的每第n个元素。如果它更少,我只需获得整个范围的整个表格。

   <?php
            ....
            $query_ct="select  count(*) from ". $table_selected;
        //Hey  MySQL how many u got in that table_selected
        $result_ct=mysql_query($query_ct);

        while($row=mysql_fetch_array($result_ct))
              {
               $nct=$row[0];//SQL said there are $nct rows from the query_ct 
                    }
         if ($nct>5000 ){
                  $rownum=intval($nct/5000);
                  $query_evry_n="SELECT * FROM (SELECT @row:=@row+1 as rownum,".
                      $table_selected.".*     FROM (SELECT @row:=0 )r,".
                      $table_selected ." ) ranked 
                      WHERE rownum %".$rownum."=1";
                } else{
                  $query_evry_n="SELECT * FROM ".$table_selected;
                      }


        $result=mysql_query($query_evry_n);
            if($result) {
             $myarr=array();
                 while($row=mysql_fetch_array($result)){

                   $myarr[]=array($row['time'],$row[$field_selected]/100);

              }//end while

    ?>

我希望能够在MySQL中完全做到这一点。 例如,我有一个20万行的表。 PHP将查询给定范围数组($ minVal,$ maxVal)中的数据,例如100 000到150 000。 并且MySQL将从该50 000范围或任何情况下返回每50000/5000 = 10点的样本。 我几乎没有尝试过自己解决这个问题,但到目前为止还没有成功。 谢谢你的帮助。

0 个答案:

没有答案