Watched-Flags aus mehreren Datenbanken zusammenführen

  • Probier mal folgendes ...
    Die Date MyVideos<nummer>.db.sql öffnen (am besten mit Notepad++) und folgende SQL Befehle kopieren:


    Dann eine neue Datenbank (Name z.B. 'MyVideos116old1') in phpMyAdmin anlegen und für diese Datenbank die SQL Befehle ausführen.

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Guten Morgen!

    Habe das komplette File bearbeitet und es in die neue Datenbank importiert. Das hier kommt:

    Fehler
    Statische Analyse:
    3 Fehler wurden während der Analyse gefunden.

    1. Ein Symbolname wurde erwartet! (near ""idFile"" at position 39)
    2. Mindestens eine Felddefinition wurde erwartet. (near ""idFile"" at position 39)
    3. Unerwarteter Statement-Anfang. (near ""idFile"" at position 177)

    SQL-Befehl: Kopieren
    CREATE TABLE IF NOT EXISTS "files" ( "idFile" integer, "idPath" integer, "strFilename" text, "playCount" integer, "lastPlayed" text, "dateAdded" text, PRIMARY KEY("idFile"))
    MySQL meldet:

    Externer Inhalt 192.168.0.113
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.


    #1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei '"files" (

    "idFile" integer,

    "idPath" integer,

    "strFilename" text,

    "pl...' in Zeile 1

  • Nein bitte kein Import. Da hast du mich vielleicht falsch verstanden.

    Probiere mal nur die eine Tabelle zu erstellen:


    In phpMyAdmin muss es einen Editor geben, dort den SQL-Befehl eingeben und laufen lassen.

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Hab eine Vermutung woran es liegen könnte.

    Die Tabelle 'movie' ist doch in deiner neuen MariaDB schon vorhanden. Schick doch mal einen screenshot der SQL syntax von der Tabelle 'movie'.

    Vermute das die data types unterschiedlich sind.

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Wäre es denn nicht insgesamt einfacher, sich aus den Originaldatenbanken einfach die benötigten Infos direkt zu kopieren?

    Der Übersichtlichkeit halber vielleicht nach Medientyp getrennt, z.B. für Filme (modifiziert nach Original von JakeB):

    SQL
    SELECT
     m.c00 AS Filmtitel,
     m.premiered AS Jahr,
     f.playCount,
     f.lastPlayed,
     f.dateAdded
     FROM files f
      LEFT JOIN movie m ON f.idFile = m.idFile
     WHERE f.playCount IS NOT NULL AND m.c00 IS NOT NULL
     ORDER BY m.c00;

    Dann im DB Browser in der Vorschau mit CTRL+A alles markieren, rechts klicken und "Als SQL kopieren". Das gibt dann ganz viele "INSERT INTO" Anweisungen, die muss man dann eben in "UPDATE" Anweisungen für die neue Tabelle umarbeiten:

    Vorher:

    SQL
    INSERT INTO "main"."" ("Filmtitel", "Jahr", "playCount", "lastPlayed", "dateAdded") VALUES ('Collateral Beauty', '2016-12-06', '1', '2020-10-31 20:27:37', '2018-06-15 01:37:37');

    Nachher:

    SQL
    UPDATE Filmtabelle
    SET playCount = '1', lastPlayed = '2020-10-31 20:27:37', dateAdded = '2018-06-15 01:37:37'
    WHERE Filmtitel = 'Collateral Beauty'

    (Tabellenname fiktional, weiß ja nicht, wie die Zieldatenbank aussieht :)

    Oder denke ich da zu einfach?

  • Diese screenshots helfen nicht weiter. In suche etwas über die Datenbankstruktur dieser Tabelle.
    Hier ist ein Ausschnitt aus dem 'DB Browser for SQLite':

    So etwas brauche ich aus phpMyAdmin von deiner schon bestehenden movie Tabelle.
    Vermutlich sind das die richtigen data types und vielleicht erscheint auch die <number>.

    Shuddery:
    Den Trick kannte ich noch gar nicht, dass man daraus INSERT Befehle erstellen kann. Aber deinen Vorschlag habe ich früher auf eine andere Weise genutzt:
    1. via SELECT werden UPDATE Befehle erzeugt
    Beispiel für Filme aus der Bibliothek:

    SQL
    UPDATE files SET playCount = 1, lastPlayed = 'YYYY-MM-DD hh:mm:ss', dateAdded = 'YYYY-MM-DD hh:mm:ss' WHERE idFile IN (SELECT idFile FROM movie WHERE c00 = 'Filmtitel' AND premiered = 'YYYY');

    2. Speichern als csv file
    3. Umwandeln in xls file und noch etwas anpassen. Das war damals unter LibreOffice einfacher als wie mit Excel.
    4. Der fertige Inhalt kann dann einfach in einer sql Datei gespeichert werden.

    In Punkt 3 müsste ich mich erstmal wieder reinarbeiten. Das rumgefrimel für Punkt 3 war damals auch der Grund, dass ich die Methode mit dem Anhängen einer Datenbank bevorzuge.

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

    Einmal editiert, zuletzt von JakeB (3. November 2020 um 15:57)

  • Da muss man eigentlich nicht viel selbst machen, das erledigt Notepad++ (oder jeder andere ernstzunehmende Editor) mit regulären Ausdrücken ganz alleine.

    Für Notepad++:

    • Suchen und Ersetzen öffnen
    • Suchen nach:
      Code
      .* VALUES \('(.*)', '(.*)', '(.*)', '(.*)'\);
    • Ersetzen durch:
      SQL
      UPDATE files SET playCount = '\2', lastPlayed = '\3', dateAdded = '\4' WHERE strFilename = '\1' AND playCount = NULL
    • Suchmodus: Reguläre Ausdrücke

    • "alles ersetzen" anklicken.
    • Anschließend das Ergebnis auf Plausibilität prüfen!
    • Erst auf einer KOPIE der Tabelle prüfen! Bei Problemen mit der WHERE-Klausel kann es leicht passieren, dass einfach ALLE Einträge der Tabelle geändert werden.

    Nachteil hier ist eben, dass das nur gut funktioniert, wenn die Dateinamen eindeutig sind. Wenn Serien immer nur "S01E01.mkv" heißen, dann klappt das natürlich nicht :)

  • @Shuddery: Funktioniert wunderbar! :thumbup:

    @marky0736:
    Das ist jetzt zwar nicht mehr entscheidend, aber mich würde doch interessieren ob der folgende Befehl jetzt auf der MariaDB funktioniert.


    Werde die Lösung von Shuddery jetzt auf Filme, Serien, Musikvideos und Dokus/Konzerte über Dateimodus übertragen.

    Deine Konstellation (wenn ich jetzt alles richtig verstanden habe):
    - Filme, Musikvideos und Serien befinden sich in der Bibliothek.
    - Dokus und Konzerte werden via Dateimodus wiedergegeben.

    Würde gerne nach dem Pfad nicht filtern*, aber kann ich auch davon ausgehen das die Doku/Konzert Dateien NUR EINMAL vorkommen?

    In diesem Beispiel kommt 'Doku_1.ts' zweimal vor:
    ...\NAS-1\Dokus_1\Doku_1.ts
    ...\NAS-1\Dokus_1\Doku_2.ts
    ...\NAS-1\Dokus_1\Doku_3.ts
    ...\NAS-1\Dokus_1\Doku_4.ts

    ...\NAS-1\Dokus_2\Doku_1.ts
    ...\NAS-1\Dokus_2\Doku_2.mkv
    ...\NAS-1\Dokus_2\Doku_a.ts
    ...\NAS-1\Dokus_2\Doku_b.ts

    ...\NAS-1\Konzerte\Konzert_1.ts
    ...\NAS-1\Konzerte\Konzert_2.ts
    ...\NAS-1\Konzerte\Konzert_3.ts
    ...\NAS-1\Konzerte\Konzert_4.ts

    *Man wäre dann unabhängig vom Pfad, also der Pfad könnte in der neuen Datenbank auch unterschiedlich sein.

    Sind die Dokus und Konzerte ausschließlich einzelne Video-Dateien oder gibt es auch VIDEO_TS Dateien aus einer DVD-Ordner-Struktur oder Dateien aus einer Blu-ray-Ordner-Struktur?

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Hallo JakeB,

    die Struktur hast Du fast richtig, nur Musikvideos habe ich keine in einer Bibliothek, die liegen auch so im Dateimodus auf der Platte - zudem ist mir da das Watched-Flag auch völlig egal. Filme und Serien sind die einzigen Bibliotheken.

    Da ich ein großer Fan von Handarbeit bin, folgen bei mir alle Dokus, Konzerte, Filme usw. derselben Namenskonvention:

    "'Titel' ('Jahr') 'Länge in Minuten' ['Tonspur(en)'].Endung"

    Doppelte Dateinamen dürfte es nicht geben, könnte mir das höchstens bei den Dokus vorstellen, dass es vielleicht von "Bilderbuch Deutschland" und von "Unterwegs in der Heimat" mal eine Folge gibt, die "Der Schwarzwald" heißt, aber die müsste dann auch noch aus dem selben Jahr sein und gleich lang laufen (und eine identische Tonspur haben), also "Der Schwarzwald (2004) 46' [MP3-D].avi". Das ist sehr unwahrscheinlich und wenn, wäre das jetzt auch nicht tragisch, das kann ja nur ein paar ganz vereinzelte Folgen betreffen.

    DVD-Ordner und solchen Kram habe ich nicht, das wird umgerechnet und nach den oben genannten Konventionen benannt.

    Der Befehl geht nicht, siehe Screenshot.

  • Hallo marky0736,

    da ich nie mit dem Dateimodus arbeite, habe ich jetzt ein Problem um an Testdaten zu kommen.

    Quelle für Dateimodus z.B.:
    ...\NAS-1\Dokus_1\Doku_1.ts
    ...\NAS-1\Dokus_1\Doku_2.ts
    ...\NAS-1\Dokus_1\Doku_3.ts
    ...\NAS-1\Dokus_1\Doku_4.ts

    > Dieser Ordner beinhaltet: hab es mit 'Filme' und 'Keine' ausprobiert aber kein Erfolg.

    Wenn ich das Menü auswähle, gibt es keine Option 'Als 'gesehen' markieren' für Filme, Serienepisoden und einzelne Dateien. Die Datenbank ist jedes Mal kaputt, erst wenn die Quelle vom Dateimodus wieder entfernt wird, ist die Datenbank wieder okay.

    Der Pfad für den Dateimodus wird in der Tabelle path eingetragen, aber die einzelnen Video-Dateien werden nicht in der Tabelle files angelegt.

    Wenn ich die einzelnen Dateien in Ordner packe kann ich 'Als 'gesehen' markieren' und 'Als 'ungesehen' markieren' gleichzeitig auswählen und in der GUI wird das Häckchen nicht angezeigt.

    Wie funktioniert denn die Aufnahme von Videos via Dateimodus?

    MfG

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Hallo JakeB,

    die Dateien werden gar nicht in die Bibliothek aufgenommen, der Inhalt des Pfads wird nicht definiert.

    Bei mir gibt es aber eine Quelle Dokus. Die sieht in der Sources.xml so aus:

    <source>
    <name>Dokus</name>
    <path pathversion="1">smb://MEDIASERVER/Dokus/</path>
    <allowsharing>true</allowsharing>
    </source>

    Wenn man dann in Kodi über Videos auf "Dateien" geht (oder über andere Wege), dann kann man alle Verzeichnisse unterhalb des Shares ganz normal browsen (oder man macht sich wie ich einen Shortcut zu der Quelle im Skin). Die Dokus haben bei mir auch TBN Dateien, die benutzt werden und Kodi liest beim Zugriff auf das Verzeichnis auch die Metadaten (Auflösung / Tonspur) etc. aus.

    Wenn ich da etwas ansehe, wird es als gesehen markiert, wenn ich über das Kontextmenü gehe, kann ich Files als gesehen oder ungesehen markieren.

    Hoffentlich habe ich Deine Frage richtig verstanden, wir bringen irgendwie oft Datenbank und Bibliothek durcheinander. Ich hab's jetzt aber drei Mal durchgelesen, ich glaube jetzt stimmt's.

    Wichtig noch zu erwähnen, dass die Option "als gesehen markieren" erst verfügbar ist, wenn Kodi alle Metadaten eingelesen hat, geht zwar schnell, aber dauert einen kurzen Moment!

    Grüße

  • Hallo marky0736,

    - wenn ich die Quelle unter Videos hinzufüge ('Dieser Ordner beinhaltet' -> Keine) -> Kodi schmiert ab.
    - Quelle wieder entfernen + Datenbank bereinigen -> Kodi schmiert ab

    Hab langsam das Gefühl, dass ich die ganze Bibliothek erstmal wieder lösche.

    Wo steht denn in deiner sources.xml die Quelle 'Dokus' unter <video></video> oder <files></files>?

    MfG

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Fehler war wohl das fehlende Speichern im 'DB Browser for SQLite'. :wacko:
    Nach dem Entfernen der Quelle, bleibt der Eintrag in der path Tabelle immer stehen. Da hilft auch kein 'Datenbank bereinigen'.

    Das Arbeiten mit fake Video Dateien geht auch nicht, Kodi erwartet richtige Video Dateien.

    Testdaten für Dateimodus sind jetzt also vorhanden und funktionieren korrekt. :whistling:

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Hallo @Shuddery,

    mir ist gerade beim Testen aufgefallen, dass der Replace Befehl in Notepad++ nicht ganz sauber durchläuft.

    z.B.

    SQL
    SELECT
     m.c00, -- Filmtitel
     m.premiered, -- Jahr 
     f.playCount,
     f.lastPlayed,
     f.dateAdded
     FROM movie m, files f
     WHERE m.idFile = f.idFile
     AND f.playCount IS NOT NULL
     ORDER BY m.c00;


    Find what:

    Code
    .* VALUES \('(.*)', '(.*)', '(.*)', '(.*)', '(.*)'\);


    Replace with:

    SQL
    UPDATE files SET playCount = '\3', lastPlayed = '\4', dateAdded = '\5' WHERE idFile IN (SELECT idFile FROM movie WHERE c00 = "\1" AND premiered = '\2');


    Ergebnis:

    SQL
    UPDATE files SET playCount = '1', lastPlayed = 'YYYY-MM-DD hh:mm:ss', dateAdded = 'YYYY-MM-DD hh:mm:ss' WHERE idFile IN SELECT idFile FROM movie WHERE c00 = "Film_xyz" AND premiered = 'YYYY';

    Er löscht die Klammern um das SELECT statement. Kann man da was machen?

    Falls nicht, könnte man zur Not: ...
    - Ersetze 'SELECT' mit '(SELECT'
    - Ersetze ';' mit ');'
    ... ausführen.

    MfG

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

  • Ja, das kann man leicht beheben. Runde Klammern werden bei RegExp verwendet um Gruppen zu definieren. Wenn man tatsächlich eine Klammer verwenden will, muss man ein \ davor schreiben:

    SQL
    UPDATE files SET playCount = '\3', lastPlayed = '\4', dateAdded = '\5' WHERE idFile IN \(SELECT idFile FROM movie WHERE c00 = "\1" AND premiered = '\2'\);
  • Hallo @marky0736,

    @Shuddery:
    Vielen Dank für die Unterstützung!
    Das Suchergebnis 'Als SQL kopieren' und via RegExp in Notepad++ zu bearbeiten ist genial ... und ich habe mich damals mit dem csv zu xls Export rumgeschlagen. :wacko:

    Vielleicht gibt es in phpMyAdmin ein tab 'SQL' für die Tabelle 'movie'. Hier müsste die korrekte SQL Syntax:

    Code
    CREATE TABLE "movie" ( 
    ...
    );

    ... stehen. Wie auch immer eine Lösung würde man sicherlich irgendwann finden, aber das spielt ja jetzt zum Glück keine Rolle mehr.


    Watched-Flags aus einer alten Kodi-Datenbank auf die neue Kodi-Datenbank übertragen

    Was machen die UPDATE scripts:
    - wenn Filmtitel + Jahr übereinstimmen erfolgt ein Update
    - wenn Episodentitel + First Aired übereinstimmen erfolgt ein Update
    - wenn Dateiname (Dateimodus) übereinstimmt erfolgt ein Update

    - drei Einträge werden in der Tabelle files aktualisiert:
    -- gesehen (playCount)
    -- wann zuletzt abgespielt (lastPlayed)
    -- wann hinzugefügt (dateAdded) ... dateAdded IS NULL bei Dateiname

    Vorbedingungen:
    Um die Kodi-Datenbank zu bearbeiten benötigen wir einen DB-Editor (z.B. 'DB Browser for SQLite'): siehe link im Beitrag #9

    Wichtig: Mit dem DB-Editor arbeiten wir zur Sicherheit NUR auf Kopien.

    zum Beispiel:

    Code
    alte Datenbank | neue Datenbank | Name der Kopie
    ----------------------------------------------------
    MyVideos116.db | -              | MyVideos116old1.db
    MyVideos116.db | -              | MyVideos116old2.db
    MyVideos116.db | -              | MyVideos116old3.db
    -              | MyVideos116.db | MyVideos116new.db

    1.0 Suche nach Filmen mit playCount>=0 in der Bibliothek (Datenbank: MyVideos<number>old1.db):

    SQL
    SELECT
     m.c00, -- Filmtitel
     m.premiered, -- Jahr 
     f.playCount,
     f.lastPlayed,
     f.dateAdded
     FROM movie m, files f
     WHERE m.idFile = f.idFile
     AND f.playCount IS NOT NULL
     ORDER BY m.c00;


    1.1 Das komplette Suchergebnis 'Als SQL kopieren' und in der Datei 'old-1_movie.sql' abspeichern.

    1.2 Die Datei 'old-1_movie.sql' mit Notepad++ öffnen:
    Search > Replace...
    Find what:

    Code
    .* VALUES \('(.*)', '(.*)', '(.*)', '(.*)', '(.*)'\);


    Replace with:

    SQL
    UPDATE files SET playCount = '\3', lastPlayed = '\4', dateAdded = '\5' WHERE idFile IN \(SELECT idFile FROM movie WHERE c00 = "\1" AND premiered = '\2'\);

    Regular expression [x]

    Das Ergebnis sollte dann so aussehen:

    SQL
    UPDATE files SET playCount = '1', lastPlayed = 'YYYY-MM-DD hh:mm:ss', dateAdded = 'YYYY-MM-DD hh:mm:ss' WHERE idFile IN (SELECT idFile FROM movie WHERE c00 = "Filmtitel-1" AND premiered = 'YYYY');
    UPDATE files SET playCount = '1', lastPlayed = 'YYYY-MM-DD hh:mm:ss', dateAdded = 'YYYY-MM-DD hh:mm:ss' WHERE idFile IN (SELECT idFile FROM movie WHERE c00 = "Filmtitel-2" AND premiered = 'YYYY');
    usw.

    2.0 Suche nach Serienepisoden mit playCount>=0 in der Bibliothek (Datenbank: MyVideos<number>old1.db):

    Doppelte Einträge sollten nicht vorhanden sein. Zur Sicherheit überprüfen mit:

    SQL
    SELECT e.c00, e.c05, COUNT(e.c00) AS Wie_oft_doppelt
     FROM episode e
     GROUP BY e.c00
     HAVING (COUNT(e.c00) > 1);


    Wichtig: 'Episodentitel' und 'First Aired' MUSS immer vorhanden sein!

    SQL
    SELECT 
     e.c00, -- Episodentitel
     e.c05, -- First Aired
     f.playCount,
     f.lastPlayed,
     f.dateAdded
     FROM episode e, files f
     WHERE e.idFile = f.idFile  
     AND f.playCount IS NOT NULL
     ORDER BY e.c00, e.c05;


    2.1 Das komplette Suchergebnis 'Als SQL kopieren' und in der Datei 'old-1_episode.sql' abspeichern.

    2.2 Die Datei 'old-1_episode.sql' mit Notepad++ öffnen:
    Search > Replace...
    Find what: <das selbe wie in 1.2>

    Replace with:

    SQL
    UPDATE files SET playCount = '\3', lastPlayed = '\4', dateAdded = '\5'  WHERE idFile IN \(SELECT idFile FROM episode WHERE c00 = "\1" AND c05 = '\2'\);

    Regular expression [x]


    3.0 Suche nach Videos mit playCount>=0 im Dateimodus (Datenbank: MyVideos<number>old1.db):

    Hier ist mir aufgefallen, wenn Videos aus einer Dateimodus-Quelle gelöscht werden, stehen sie immer noch in der Tabelle files.

    Zuerst benötigen wir noch die path.idPath:
    z.B. deine Quelle: smb://MEDIASERVER/Dokus/ -> 'Dokus'

    SQL
    SELECT idPath, strPath FROM path
     WHERE strPath LIKE '%Dokus%' OR strPath LIKE '%Konzerte%';
    SQL
    SELECT 
     f.strFilename, -- Videodateiname
     f.playCount,
     f.lastPlayed
    -- f.dateAdded -- dateAdded gibt es im Dateimodus nicht
     FROM path p, files f
     WHERE p.idPath = f.idPath
     AND p.idPath IN (<number>) -- Hier muss deine path.idPath der Dateimodus-Quelle(n) stehen!
     AND f.playCount IS NOT NULL
     ORDER BY f.strFilename;


    Wenn es z.B. zwei Pfade/Quellen für deinen Dateimodus gibt, müsste es so aussehen:

    Code
    ...
     AND p.idPath IN (<number>, <number>)
     ...


    3.1 Das komplette Suchergebnis 'Als SQL kopieren' und in der Datei 'old-1_Dateimodus.sql' abspeichern.

    3.2 Die Datei 'old-1_Dateimodus.sql' mit Notepad++ öffnen:
    Search > Replace...
    Find what:

    Code
    .* VALUES \('(.*)', '(.*)', '(.*)'\);


    Replace with:

    SQL
    UPDATE files SET playCount = '\2', lastPlayed = '\3'  WHERE idFile IN \(SELECT idFile FROM files WHERE strFilename = '\1'\);

    Regular expression [x]


    4.0 Den Inhalt oder die Dateien 'old-1_movie.sql', 'old-1_episode.sql' und 'old-1_Dateimodus.sql' in der MariaDB laufen lassen.

    Damit wäre das erste Update für:
    - MyVideos<number>old1.db -> MyVideos<number>new.db
    ... fertig. [pr02]

    MfG

    Testumgebung - OS: Ubuntu 20.04 LTS | Kodi 19.1 | skin: Rapier 12.2.26 + Transparency! (views Slide und Fanart) | für Datenbank-/ Skin Tests
    Live Umgebung - OS: Ubuntu 16.04.3 LTS | Kodi 17.6 | skin: Transparency! 10.3.0 | TV

    Einmal editiert, zuletzt von JakeB (6. November 2020 um 14:59)

  • Warum braucht man in dem Fall die "Movies" und "Episodes" Tabellen überhaupt? Soweit ich das überblicke, muss am Ende ja ohnehin nur die files-Tabelle abgeglichen werden? Dann kann man doch aus der alten DB auch nur Werte aus dieser Tabelle holen…

    Vorher prüfen ob es doppelte Datenamen gibt, weil das wird in dem Fall natürlich nicht funktionieren:

    SQL
    SELECT strFilename, COUNT(strFilename) AS Wie_oft_doppelt
     FROM Files
     WHERE playCount > 0
     GROUP BY strFilename
     HAVING (COUNT(strFilename) > 1)
     ORDER BY Wie_oft_doppelt DESC;


    Benötigte Daten abrufen:

    SQL
    SELECT strFilename, playCount, lastPlayed, dateAdded FROM Files WHERE playcount > 0


    Suchergebnis "Als SQL kopieren" und wie ob oben in UPDATE statements umwandeln. DAZU ggf in Jake's Vorschlag weitere WHERE-Bedingungen ergänzen. Aktuell werden da die Werte IMMER überschrieben, auch wenn schon ein playCount vorhanden ist! Das kommt natürlich etwas auf die Ansprüche an. Will man nur das "watched" Flag haben, ist das ja egal. Ansonsten braucht es hier ggf. etwas mehr Logik…

    Das klappt natürlich nur wenn es (kaum) doppelte Dateinamen gibt. Weil das UPDATE statement wird dann voraussichtlich die Daten von ALLEN Einträgen mit dem gleichen Dateinamen überschreiben.

    Aber für Datenbanken mit eindeutigen Dateinamen dürfe das deutlich einfacher gehen, oder?

    Hinweis: (insbesondere vor Ausführung des UPDATE-scripts) Backup erstellen!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!