如何从循环(while)外的数组中获取单个数据以将该数据插入另一个table?

How to get individual data from an array that is outside the loop (while) to insert that data into another table?

为了能够在循环外(while)得到结果,我做了以下操作:

$date_day = date('Y-m-d');
$stmt = $con->prepare("
SELECT MAX(l.id_logtrama) AS id_logtrama
     , MAX(l.fechaHora) AS fechaHora
     , l.idCliente
     , l.idEquipo
     , MAX(l.statusGlobal) AS statusGlobal
     , COUNT(*) AS total
  FROM logtrama l
  JOIN equipo e
    ON l.idEquipo = e.idEquipo
   AND l.idCliente = e.idCliente
 WHERE DATE(l.fechaHora)=?
 GROUP 
    BY l.idCliente
     , e.idEquipo
");
$stmt->bind_param("s", $date_day);
$stmt->execute();
$stmt->store_result();

$DataArray = [];
$stmt->bind_result(
    $DataArray['id_logtrama'],
    $DataArray['fechaHora'],
    $DataArray['l.idCliente'],
    $DataArray['l.idEquipo'],
    $DataArray['statusGlobal'],
    $DataArray['total']
);
while ($stmt->fetch()) {
    $row = [];
    foreach ($DataArray as $key => $val) {
        $row[$key] = $val;
    }
    $array[] = $row;
}
print_r($array);

结果,我得到以下信息:

Array ( [0] => 
 Array ( [id_logtrama] => 4 
           [fechaHora] => 2021-04-19 22:01:09.059800 
           [l.idCliente] => 20 
           [l.idEquipo] => 1 
           [statusGlobal] => 2 
           [total] => 1 )
        [1] => Array ( 
          [id_logtrama] => 3 
          [fechaHora] => 2021-04-19 22:01:05.520600 
          [l.idCliente] => 20 
          [l.idEquipo] => 8 
          [statusGlobal] => 2 
          [total] => 3 )
 )

我需要能够将该数据插入另一个 table 例如 alert_notify:

id_notify id_logtrama idCliente idEquipo alert_type count_notify notify_date
    1         4          20        1          2            1       2021-04-19 22:01:09.059800
    2         3          20        8          2            3       2021-04-19 22:01:05.520600

我怎样才能实现这个目标?

我建议你为 SELECT 和 INSERT 做一个声明。 做这样的事情:

INSERT INTO alert_notify AS SELECT * FROM (
    SELECT 
        MAX(l.id_logtrama) AS id_logtrama,
        MAX(l.fechaHora) AS fechaHora,
        l.idCliente,
        l.idEquipo,
        MAX(l.statusGlobal) AS statusGlobal,
        COUNT(*) AS total
    FROM logtrama l
        JOIN equipo e
            ON l.idEquipo=e.idEquipo
            AND l.idCliente=e.idCliente 
    WHERE DATE(l.fechaHora)=?
    GROUP BY l.idCliente, e.idEquipo
) AS t
WHERE NOT EXISTS (
    SELECT 'x'
    FROM alert_notify AS an
    WHERE an.idCliente = t.idCliente
    AND an.idEquipo = t.idEquipo
    AND an.notify_date = t.fetchaHora
)

这样,只有 idCliente, idEquipo, notify_datealert_notify 上没有对应关系的记录才会被插入。

PS:如果alert_notify中定义字段的顺序与SELECT