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

时间:2021-04-20 05:54:19

标签: php mysql mysqli

为了能够在循环外(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 )
 )

我需要能够将该数据插入到另一个表中,例如 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

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

1 个答案:

答案 0 :(得分:1)

我建议你为 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_date 上的 alert_notify 没有对应关系的记录。

PS:如果 INTO alert_notify AS SELECT * 中定义的字段的顺序与 SELECT 返回的字段的顺序不同,请以正确的顺序使用字段列表显式 alert_notify

相关问题