Ich habe ein PHP-Skript im Taskplaner jeden Tag von 7:45 bis 05.00 Uhr ausgeführt. Es funktioniert gut, aber für den ersten Lauf gibt es nichts zurück, da noch keine Datensätze erstellt wurden (Datensätze werden von CSR-Agenten erstellt, die Anrufe entgegennehmen). Ich habe die SQL-Abfragen im Skript ausgeführt, um Werte auszuwählen, zu aggregieren und in eine Tabelle einzufügen, und ich erstelle dann eine JSON-Datei aus diesen Werten. Auch das alles ist perfekt, außer dem ersten Lauf.Einfügen von 0 für leere Rückkehr bei Auswahl (SQL-Skript läuft auf Task-Scheduler)
Ich wurde gefragt, ob ich etwas hinzufügen kann, so dass, wenn dieser erste Job nichts zurückgibt, es nur 0 für alles einfügen würde. Auf diese Weise würden, selbst wenn es 5 Mal ohne Datensätze/Aufrufe im System lief, immer noch Daten vorhanden sein und die CSR-Bildschirme würden etwas anzeigen. Gibt es einen ziemlich einfachen Weg, dies zu tun?
Hier ist der Großteil des Skripts:
$data = mysqli_query($conn2,
"SELECT
case
when callingpartyno in (select extension from test.test_users)
then callingpartyno
when finallycalledpartyno in (select extension from test.test_users)
then finallycalledpartyno
end as 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(case when(legtype1 = 1 and duration > 60) then 1 else 0 end) as credit_for_outbound
, sum(if(legtype1 = 2,1,0) and answered = 1) as total_inbound
, sum(if(legtype1 = 2,1,0) and answered = 0) as total_missed
, sum(if(legtype1 = 1, 1, 0)) + -- outbound calls
sum(if(legtype1 = 2, 1, 0)) as total_calls
,round((sum(if(legtype1 = 2,1,0) and answered = 1))/(sum(if(legtype1 = 1, 1, 0)) + -- outbound calls
sum(if(legtype1 = 2, 1, 0))) * 100,2) as percent_answered
, now() as time_of_report
, curdate() as date_of_report
FROM
test.session a
join test.callsummary b
on a.notablecallid = b.notablecallid
where
date(a.ts) >= curdate()
and (
callingpartyno in (select extension from test.test_users
)
or finallycalledpartyno in (select extension from test.test_users
)
)
group by
extension") or die(mysqli_error($conn2));
$stmt = mysqli_prepare($conn2,
"INSERT into test.test_totals
(extension,
total_talk_time_seconds,
total_talk_time_minutes,
total_outbound,
credit_for_outbound,
total_inbound,
missed_calls,
total_calls,
percent_answered,
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),
credit_for_outbound = values(credit_for_outbound),
missed_calls = values(missed_calls),
total_calls = values(total_calls),
percent_answered = values(percent_answered),
time_of_report = NOW()") or die(mysqli_error($conn2));
Entschuldigung, ich denke, ich verstehe, wenn ich diese Geige betrachte, aber wie müsste ich meine bestehende Abfrage genau ändern? Meine now() ist eine von vielen Variablen in der Auswahl, also würde ich sie einfach in eine Unterabfrage einfügen? –
ziemlich viel, ich werde die Frage bearbeiten, um ein bisschen mroe info zu geben (schrieb die Antwort von einem iphone und es ist ein richtiger Schmerz in den Arsch Kopieren und Einfügen von Code auf einem i –
Ah, danke! Das macht Sinn, ich war einfach nicht sicher, wie man es richtig bearbeitet. –