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. 
Vielleicht gibt es in phpMyAdmin ein tab 'SQL' für die Tabelle 'movie'. Hier müsste die korrekte SQL Syntax:
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:
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):
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:
.* VALUES \('(.*)', '(.*)', '(.*)', '(.*)', '(.*)'\);
Replace with:
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:
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:
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!
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:
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'
SELECT idPath, strPath FROM path
WHERE strPath LIKE '%Dokus%' OR strPath LIKE '%Konzerte%';
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:
...
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:
.* VALUES \('(.*)', '(.*)', '(.*)'\);
Replace with:
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. ![prst1 [pr02]](https://www.kodinerds.net/wcf/images/smilies/smiley147.gif)
MfG