Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:选择、分组并仅显示具有相同键值的数组?_Php_Mysql_Sql - Fatal编程技术网

PHP:选择、分组并仅显示具有相同键值的数组?

PHP:选择、分组并仅显示具有相同键值的数组?,php,mysql,sql,Php,Mysql,Sql,我有一个MySQL数据库,它保存车辆OBD-II读卡器的日志数据。与读取器接口的应用程序收集大量(通常远远超过2000个)数据点集。每个数据点集在表中都有自己的行,结果如下: +---------------+----------------------------------+---------------+----+----+-----+ | session | id | time | kd | kf

我有一个MySQL数据库,它保存车辆OBD-II读卡器的日志数据。与读取器接口的应用程序收集大量(通常远远超过2000个)数据点集。每个数据点集在表中都有自己的行,结果如下:

+---------------+----------------------------------+---------------+----+----+-----+
| session       | id                               | time          | kd | kf | ... |
+---------------+----------------------------------+---------------+----+----+-----+
| 1420236074526 | 5cff4a3cc80b22cecb7de85266b25355 | 1420236074534 | 14 | 8  | ... |
| 1420236074526 | 5cff4a3cc80b22cecb7de85266b25355 | 1420236075476 | 17 | 8  | ... |
| 1420236074526 | 5cff4a3cc80b22cecb7de85266b25355 | 1420236075476 | 19 | 8  | ... |
| 1420236074526 | 5cff4a3cc80b22cecb7de85266b25355 | 1420236075476 | 23 | 8  | ... |
| 1420236074526 | 5cff4a3cc80b22cecb7de85266b25355 | 1420236077477 | 25 | 8  | ... |
+---------------+----------------------------------+---------------+---------+-----+
k5
kf
是车辆数据类型(分别为车速和环境空气温度)

此表中有两个索引(称为
raw\u log
):

  • session映射到列
    session
    id
  • id映射到列
    id
我想做的是抓取所有具有相同时间戳的行(例如1420236074526),并将它们组合到一个“会话”中。这里的目标是创建一个选择列表,在这里我可以按会话查看数据。理想情况下,我会有这样的输出:

<select>
  <option>January 1, 2015 - 7:43AM</option>
  <option>January 1, 2015 - 5:15PM</option>
  <option>January 2, 2015, - 7:38AM</option>
  ...
</select>
这很有效。。。某种程度上。我得到的会话时间是数组,
kd
kf
下面有正确的键/值对,但它似乎不想遍历整个过程。目前表中大约有25000行,但它只返回了一些,而且似乎没有任何逻辑顺序来显示列表。。。它将从1月8日返回两个结果,从9日返回一个,从10日返回4个,以此类推



选择具有相同时间戳的所有会话、对它们进行分组并创建仅显示给定会话数据的可选对象的最佳方法是什么?

如果您没有对查询排序,则列表可能没有任何逻辑顺序。此外,如果
session
列中存在重复值,则会覆盖会话数据。您可能需要执行类似于
$sessionArray[$s_time][]=array(…
的操作来将每一行追加到会话id下。此外,如果遇到问题,最好将查询结果限制在20-100左右,并持续按摩,直到得到所需的结果

$session = $database->query("SELECT * FROM raw_logs USE INDEX (session)");

$sessionArray = array();
foreach($session as $session){
  $s_time = $session["session"];
  $sessionArray[$s_time] = array(
    "vehicle_speed" => $session["kd"],
    "ambient_air_temp" => $session["kf"]
  );
} print_r($sessionArray);