Php 保存MySQL查询的每N条记录,同时保持递减限制
有没有一种方法可以在保持递减限制的同时返回MySQL请求的每N条记录?否则,是否可以只将每个第n个请求保存到我的PHP数组中?这些数据最终会通过javascript向谷歌图表提供数据,显然10080条记录并不能创建一个平滑的图表Php 保存MySQL查询的每N条记录,同时保持递减限制,php,mysql,Php,Mysql,有没有一种方法可以在保持递减限制的同时返回MySQL请求的每N条记录?否则,是否可以只将每个第n个请求保存到我的PHP数组中?这些数据最终会通过javascript向谷歌图表提供数据,显然10080条记录并不能创建一个平滑的图表 $myquery = "SELECT * FROM ( SELECT @row := @row +1 AS rownum, dateTime, outTemp, dewpoint FROM ( SELECT @ro
$myquery = "SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, dateTime, outTemp, dewpoint
FROM (
SELECT @row :=0) r, archive
) ranked
WHERE rownum % 5 = 1";
$query = mysql_query($myquery);
if ( ! $query )
{
echo mysql_error();
die;
}
$table=array();
$table['cols'] = array(
// Chart Labels (i.e. column headers)
array('label' => 'dateTime', 'type' => 'number'),
array('label' => 'Temp', 'type' => 'number'),
array('label' => 'Dew', 'type' => 'number')
);
$rows = array();
while($r = mysql_fetch_assoc($query))
{
$temp = array();
$temp[] = array('v' => (int) $r['dateTime']);
$temp[] = array('v' => (int) $r['outTemp']);
$temp[] = array('v' => (int) $r['dewpoint']);
$rows[] = array('c' => $temp);
}
$table['rows'] = $rows;
$jsonTable = json_encode($table);
更新:
我可以使用上的说明选择每N行,但这并不能解决如何保留递减过滤器的问题。我尝试使用类似于使用
DESC LIMIT 10
的方式选择数据集的最后x行。我通过获取行数并根据行数N(本例中为间隔)和所需数据范围设置限制来解决此问题。此解决方案将数据按降序排列,在限制范围内,同时保持数据本身在Google图表绘图中的正确顺序
SELECT @row_number := NULL;
SELECT
@row_number := IFNULL(@row_number, 0) + 1 AS row_number,
Column1,
Column2,
ColumnN
FROM the_table
WHERE @row_number % 2 = 0
ORDER BY Column1
// Get a row count ... ... ...
$count = mysql_query("select count(1) FROM archive");
$grabCount = mysql_fetch_array($count);
if ( ! $count )
{
echo mysql_error();
die;
}
// ROW BOUNDARIES ... ... ...
$hour = 60;
$day = 1440;
$week = 10080;
$month = 43200;
$year = 525600;
$timeSpan = $day;
$interval = 30;
$filter = $timeSpan / $interval;
$rows = (int) ($grabCount[0] / $interval);
$rowStart = ($rows - $filter);
$rowEnd = $rows;
// Query the Database for what you want
$myquery = "SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, dateTime, outTemp, dewpoint
FROM (
SELECT @row :=0) r, archive
) ranked
WHERE rownum % $interval = 1 LIMIT $rowStart,$rowEnd";
停止使用mysql函数,因为它们已经被弃用了:说真的,你为什么不谷歌一下呢?google上的第一个结果-与DESC LIMIT一起使用时,从SQL server返回一个错误