PHP/MySQL 第 n 行与 DATE_SUB 等

标签 php mysql

所以我有一个表格,我用来绘制一些数据。
id、agcid、ooscount、日期

数据是 18 个对象每 5 分钟采样一次
ID 是自动递增的,agcid 代表对象的 ID,date 是自解释的,ooscount 是一个整数列。

我目前正在使用这个:

$sql2 = "SELECT ooscount, date 
          FROM ooscount 
          where agcid = '".$agcid."' AND date >= DATE_SUB(NOW( ),INTERVAL 7 HOUR) 
          order by date  DESC";

简单但有效,但是我有一个非常大的数据集,使图表复杂化。

我尝试将 AND ooscount.id mod 3 = 0 添加到此,但是,每个 agcid 上的数据集似乎非常随机,有些只有一对,有些比应有的多 5 倍。

然后我尝试了这样的方法:
  $sql2 = "set @row:=-1; 
        SELECT ooscount.*
        FROM
            ooscount
            INNER JOIN
            (
                SELECT id
                FROM
                    (
                        SELECT @row:=@row+1 AS rownum, id 
                        FROM
                            (
                                SELECT id, date, ooscount FROM ooscount where agcid = '".$agcid."' and date >= DATE_SUB(NOW( ),INTERVAL 12 HOUR) order by date DESC
                            ) AS sorted
                    ) as ranked
                WHERE rownum % 3 = 0
            ) AS subset
                ON subset.id = ooscount.id;";

它已被注释掉,请原谅//。然而,这种方法在 phpMyAdmin 中工作时,给了我这个:
PHP Fatal error:  Call to a member function fetch_assoc()
on a non-object in /var/www/khamlin/oosagc.php on line 145

最后,显示这个的代码部分:
$result2 = $conn->query($sql2);
$rowsarray = "";
//var_dump($result2);
while ($row2 = $result2->fetch_assoc()) {

我认为问题在于我发现的示例不期望单个表上有多个数据集,因此 ID 将是增量的(即:1、2、3、4、5、6 等),而不是( 168006、168023、168041、168060)。

我将如何改变它以满足我在这里的需求?

结构
CREATE TABLE IF NOT EXISTS `ooscount` ( `id` int(10) NOT NULL AUTO_INCREMENT, `agcid` int(3) NOT NULL, `ooscount` int(10) NOT NULL, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=168580 ;
````

样本数据:https://jpst.it/1bfFt

当前输出:每 5 分钟一个 ooscount 和日期的数据点(即:data: [{"ooscount":"4907","date":"2018-02-21 09:40:01"},{"ooscount":"4905","date":"2018-02-21 09:35:02"},{"ooscount":"4910","date":"2018-02-21 09:30:02"},{"ooscount":"4904","date":"2018-02-21 09:25:01"},{"ooscount":"4900","date":"2018-02-21 09:20:02"},{"ooscount":"4898","date":"2018-02-21 09:15:02"},{"ooscount":"4989","date":"2018-02-21 09:10:01"},{"ooscount":"5008","date":"2018-02-21 09:05:02"},{"ooscount":"4933","date":"2018-02-21 09:00:01"},{"ooscount":"4915","date":"2018-02-21 08:55:01"},{"ooscount":"4903","date":"2018-02-21 08:50:02"},{"ooscount":"4898","date":"2018-02-21 08:45:01"},{"ooscount":"4899","date":"2018-02-21 08:40:01"},{"ooscount":"4909","date":"2018-02-21 08:35:01"},{"ooscount":"4918","date":"2018-02-21 08:30:01"},{"ooscount":"4906","date":"2018-02-21 08:25:02"},{"ooscount":"4906","date":"2018-02-21 08:20:01"},{"ooscount":"4900","date":"2018-02-21 08:15:02"},{"ooscount":"4895","date":"2018-02-21 08:10:01"},{"ooscount":"4883","date":"2018-02-21 08:05:02"},{"ooscount":"4881","date":"2018-02-21 08:00:01"},{"ooscount":"4879","date":"2018-02-21 07:55:02"},{"ooscount":"4883","date":"2018-02-21 07:50:02"},{"ooscount":"4875","date":"2018-02-21 07:45:02"},{"ooscount":"4875","date":"2018-02-21 07:40:01"},{"ooscount":"4879","date":"2018-02-21 07:35:02"},{"ooscount":"4882","date":"2018-02-21 07:30:01"},{"ooscount":"4888","date":"2018-02-21 07:25:01"},{"ooscount":"4877","date":"2018-02-21 07:20:01"},{"ooscount":"4879","date":"2018-02-21 07:15:02"},{"ooscount":"4884","date":"2018-02-21 07:10:02"},{"ooscount":"4886","date":"2018-02-21 07:05:02"},{"ooscount":"4904","date":"2018-02-21 07:00:02"},{"ooscount":"4906","date":"2018-02-21 06:55:01"},{"ooscount":"4904","date":"2018-02-21 06:53:32"},{"ooscount":"4904","date":"2018-02-21 06:50:02"},{"ooscount":"4892","date":"2018-02-21 06:45:01"},{"ooscount":"4795","date":"2018-02-21 06:40:02"},{"ooscount":"4793","date":"2018-02-21 06:35:01"},{"ooscount":"4799","date":"2018-02-21 06:30:02"},{"ooscount":"4797","date":"2018-02-21 06:25:02"},{"ooscount":"4802","date":"2018-02-21 06:20:01"},{"ooscount":"4801","date":"2018-02-21 06:15:01"},{"ooscount":"4792","date":"2018-02-21 06:10:02"},{"ooscount":"4798","date":"2018-02-21 06:05:02"},{"ooscount":"4797","date":"2018-02-21 06:00:01"},{"ooscount":"4798","date":"2018-02-21 05:55:02"},{"ooscount":"4794","date":"2018-02-21 05:50:01"},{"ooscount":"4796","date":"2018-02-21 05:45:02"},{"ooscount":"4804","date":"2018-02-21 05:40:02"},{"ooscount":"4803","date":"2018-02-21 05:35:01"},{"ooscount":"4809","date":"2018-02-21 05:30:02"},{"ooscount":"4811","date":"2018-02-21 05:25:01"},{"ooscount":"4810","date":"2018-02-21 05:20:01"},{"ooscount":"4831","date":"2018-02-21 05:15:02"},{"ooscount":"4839","date":"2018-02-21 05:10:02"},{"ooscount":"4859","date":"2018-02-21 05:05:01"},{"ooscount":"4859","date":"2018-02-21 05:00:01"},{"ooscount":"4858","date":"2018-02-21 04:55:02"},{"ooscount":"4858","date":"2018-02-21 04:50:02"},{"ooscount":"4863","date":"2018-02-21 04:45:02"},{"ooscount":"4868","date":"2018-02-21 04:40:01"},{"ooscount":"4872","date":"2018-02-21 04:35:01"},{"ooscount":"4868","date":"2018-02-21 04:30:02"},{"ooscount":"4867","date":"2018-02-21 04:25:02"},{"ooscount":"4870","date":"2018-02-21 04:20:01"},{"ooscount":"4866","date":"2018-02-21 04:15:02"},{"ooscount":"4864","date":"2018-02-21 04:10:02"},{"ooscount":"4863","date":"2018-02-21 04:05:01"},{"ooscount":"4874","date":"2018-02-21 04:00:02"},{"ooscount":"4881","date":"2018-02-21 03:55:01"},{"ooscount":"4850","date":"2018-02-21 03:50:02"},{"ooscount":"4846","date":"2018-02-21 03:45:01"},{"ooscount":"4847","date":"2018-02-21 03:40:02"},{"ooscount":"4850","date":"2018-02-21 03:35:02"},{"ooscount":"4845","date":"2018-02-21 03:30:01"},{"ooscount":"4847","date":"2018-02-21 03:25:02"},{"ooscount":"4848","date":"2018-02-21 03:20:01"},{"ooscount":"4847","date":"2018-02-21 03:15:02"},{"ooscount":"4852","date":"2018-02-21 03:10:03"},{"ooscount":"4854","date":"2018-02-21 03:05:01"},{"ooscount":"4864","date":"2018-02-21 03:00:01"},{"ooscount":"4867","date":"2018-02-21 02:55:02"},{"ooscount":"4868","date":"2018-02-21 02:50:01"},{"ooscount":"4862","date":"2018-02-21 02:45:02"}],
目标是在相同的时间内拥有更少的数据点。

最佳答案

我找到了一个适合我的解决方案。 $sql2 = "SELECT * FROM ( SELECT @row := @row +1 AS rownum, ooscount.* FROM ( SELECT @row :=0) r, ooscount where agcid='".$agcid."' and date >= DATE_SUB(NOW( ),INTERVAL 12 HOUR) ) ranked WHERE rownum %3 =1";

关于PHP/MySQL 第 n 行与 DATE_SUB 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48912118/

相关文章:

php - MySQL 调用将两个表与多个相同的行组合在一起

mysql - 这不是一个数字 Phpmyadmin

MySQL 查询 : Getting distinct values for this query

PNG 的 IDAT block 上的 PHP shell

php - 如何在此代码中生成我期望的 json

php代码插入mysql表

python - 一个奇怪的空间问题 Python

mysql - 在对每个项目进行投票后重新计算排名

javascript - 如何使用 php-function-output 作为 javascript 的输入?

php - Google App Engine PHP 请求似乎总是转到捕获所有处理程序