为了能够在循环外(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
我怎样才能实现这个目标?
答案 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
行