У меня есть PHP-скрипт, который в основном работает правильно. На самом деле запросы отличные, но моя единственная проблема на данный момент заключается в части JSON.
В конце моего сценария ниже у меня есть цикл, который обрабатывает мой $data
оператор в виде массива и записывает это в файл JSON, но теперь это проблема для меня по нескольким причинам.
В настоящее время массив содержимого и цикл while просто извлекают элементы данных, $d
из этого оператора select, а затем записывает массив в файл json. Тем не менее, теперь у меня есть $stmt2
который обновляет мою таблицу с помощью идентификатора из другой таблицы, поэтому он не включается в оператор выбора, и мне нужно, чтобы он был в файле JSON. Я не знаю, как бы я это сделал, если бы я мог использовать другой цикл.
Еще один вариант, который мне нужен, заключался в том, чтобы этот сценарий выполнял все запросы, а после завершения просто выгрузил таблицу jfi.ambitionphone
к файлу JSON, возможно, ограничив его только записями на сегодняшнюю дату.
Другая незначительная проблема заключается в том, что записываемый в данный момент JSON форматируется следующим образом:
{
"0": {
"extension": "7200",
"Total_Talk_Time_seconds": "62",
"Total_Talk_Time_minutes": "1.03",
"Total_Outbound": "0",
"Total_Inbound": "0",
"Total_Missed": "1",
"Total_Calls": "1",
"Time_of_report": "2017-09-05 09:55:54",
"Date_of_report": "2017-09-05"}, ......
Когда мне это нужно, вот так:
[
{
"ExtID" : 75,
"Extension" : 7218,
"Total_Talk_Time_seconds" : 1495,
"Total_Talk_Time_minutes" : 24.92,
"Total_Inbound" : 10,
"Total_Outbound" : 1,
"Missed_Calls" : 4,
"Total_Calls" : 11,
"Date_of_report" : "2017-08-15",
"Time_of_report" : "2017-08-15 16:13:30"}, .......
Итак, основная проблема в настоящее время заключается в том, что мне нужно, чтобы мой файл JSON включал то, что уже записано в цикле ниже, но теперь мне нужно добавить (после «расширения») ExtID из $stmt2
Вот сам скрипт:
<?php
$data = mysqli_query($conn, " SELECT c.extension
, sum(Duration) AS Total_Talk_Time_seconds
, round(sum(Duration) / 60,2) AS Total_Talk_Time_minutes
, sum(if(LEGTYPE1 = 1,1,0)) AS Total_Outbound
, sum(if(LEGTYPE1 = 2,1,0) and ANSWERED = 1) AS Total_Inbound
, sum(if(Answered = 1,0,1)) AS Total_Missed
, SUM(IF(LEGTYPE1 = 1, 1, 0)) + -- outbound
SUM(IF(LEGTYPE1 = 2, 1, 0) AND ANSWERED = 1) + -- inbound
SUM(IF(Answered = 1, 0, 1)) AS Total_Calls
, NOW() AS Time_of_report
, curdate() AS Date_of_report
FROM cdrdb.session a
INNER JOIN cdrdb.callsummary b
ON a.NOTABLECALLID = b.NOTABLECALLID
INNER join cdrdb.mxuser c
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
WHERE b.ts >= curdate()
AND c.extension IN (7276,7314,7295,7306,7357,7200,7218,7247,7331,7255,7330,7000,7215,7240,7358,7312)
group by c.extension") or die(mysqli_error( $conn));$stmt = mysqli_prepare($conn2, "Insert into jfi.ambitionphone(Extension, Total_Talk_Time_seconds, Total_Talk_Time_minutes, Total_Outbound, Total_Inbound,
Missed_Calls, Total_Calls, Date_of_report,Time_of_report )
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
ON duplicate key update
Total_Talk_Time_seconds = values(Total_Talk_Time_seconds),
Total_Talk_Time_minutes = values(Total_Talk_Time_minutes),
Total_Inbound = values(Total_Inbound),
Total_Outbound = values(Total_Outbound),
Missed_Calls = values(Missed_Calls),
Total_Calls = values(Total_Calls),
Time_of_report = NOW()
") or die(mysqli_error( $conn2));
$stmt2 = mysqli_prepare($conn2, "UPDATE jfi.ambitionphone a,
(SELECT * FROM jackson_id.users where id in
(48,75,76,77,81,82,83,85,86,87,99341,99344,99409,99422,99428)) j
SET a.ExtID = j.id where a.extension = j.extension") or die(mysqli_error($conn2));
echo print_r($stmt);
// Create the main array
$content = [];
while ($d = mysqli_fetch_array($data, MYSQLI_ASSOC)) {
mysqli_stmt_bind_param($stmt,"iidiiiiss", $d['extension'],
$d['Total_Talk_Time_seconds'], $d['Total_Talk_Time_minutes'],
$d['Total_Outbound'], $d['Total_Inbound'], $d['Total_Missed'], $d['Total_Calls'],
$d['Time_of_report'], $d['Date_of_report']) ;
mysqli_stmt_execute($stmt) or die(mysqli_error($conn2));
// Store the current row
$content[] = $d;
}
mysqli_stmt_execute($stmt2) or die(mysqli_error($conn2));// Store it all
file_put_contents('ambitionLog.json', json_encode($content, JSON_PRETTY_PRINT | JSON_FORCE_OBJECT));
?>
Задача ещё не решена.
Других решений пока нет …