mAirList Logging into mySQL Database

Um meine Frage zu stellen muss ich kurz ausholen. Wir verwenden das Logging um in eine externe Datenbank infos Bezüglich der gespielten Tracks und Sendungen zu speichern. Das ganze wird dann mit PHP ausgelesen und in einen Trackservice wieder anzuzeigen!

SQL-Befehl beim Start eines Elements
INSERT INTO playlistlog(crdate,artist,title,element,kommentar,date,time) VALUES (NOW(),%a,%b,%J,%C,CURDATE(),CURTIME());

Dies funktioniert eigentlich sehr gut bis jetzt. Wir arbeiten aber an einer Erweiterung des Trackservice (Mobile APP) und da würden wir auch die “endtime” benötigen.
Dann hab ich einfach mal bei
SQL-Befehl beim STOP eines Elemnts eingeben
INSERT INTO playlistlog(endtime) VALUES (CURTIME());

doch dann macht er mir ein der SQL Datenbank einen neue Reihe mit allen werten NULL und der “endtime”. Ich hätte das aber gerne in der letzten reihe vom Startbefehl dazu!
Ist sowas möglich? Ich bin da leider auch nicht ein großer Datenbank Spezialist!

Danke für die Hilfe

Der zweite Befehl darf kein INSERT sein (das erzeugt wirklich eine zweite Zeile), sondern muss natürlich ein UPDATE sein - du musst ja den beim Start geschriebenen Eintrag aktualisieren.

Der Schlüssel zum Erfolg ist diese Logging-Variable hier:

%g Unique identifier of the associated playback operation

Immer wenn ein Player gestartet wird, erzeugt mAirList einen Zufallsstring (derzeit eine GUID), der im Logging als %g ausgegeben werden kann. Stoppst du den Player wieder, wird derselbe String wieder als %g an das Stop-Logging übergeben. Beim nächsten Titelstart (oder wenn der Player zwischenzeitlich pausiert wurde), wird wieder ein neuer String übergeben.

%g identifiziert also den “Wiedergabevorgang” eindeutig, wenn man so will.

Was ist also zu tun?

  1. Eine weitere Spalte vom Typ VARCHAR hinzufügen, z.B. “playbackid”.
ALTER TABLE playlistlog ADD playbackid VARCHAR;
  1. Beim Start die playbackid mit eintragen:
INSERT INTO playlistlog(crdate,artist,title,element,kommentar,date,time,playbackid) VALUES (NOW(),%a,%b,%J,%C,CURDATE(),CURTIME(),%g);
  1. Beim Stop-Logging den Datensatz aktualisieren:
UPDATE playlistlog SET endtime=CURTIME() WHERE playbackid=%g;

Tipp: Es lohnt sich einen SQL-Index auf diese Spalte zu erzeugen, das beschleunigt die Schreibanfragen immens, wenn die Tabelle nach und nach wächst:

CREATE INDEX playlistlog_playbackid_idx ON playlistlog(playbackid);

Übrigens: Das interne Logging der mAirListDB arbeitet exakt genauso, und dafür wurde %g auch ursprünglich eingeführt :wink:

Super Danke 8)