SQL mySQL Suche

Shadow1701

Ensign
Registriert
Juli 2012
Beiträge
211
Guten Morgen,

ich habe hier eine mySQL Tabelle in der EPG Daten gespeichert sind. In diesen Daten fehlen bei den Serien die Staffel- und Episodennummern. Diese möchte ich durch Daten die von theTVDB kommen ergänzen.
Scriptsprache ist PHP.

Da die API Suche von theTVDB sehr eingeschränkt ist habe ich mir sämtliche Serien in einer weiteren mySQL Tabelle gespeichert.

Hier funktioniert der Abgleich aber auch nicht besonders gut. Ein Beispiel:
in der EPG Tabelle ist eine Episode von "Scrubs - Die Anfänger" gespeichert die ich um Staffel- und Episodennummer ergänzen möchte.
Jetzt ist diese Serien in der theTVDB Tabelle aber unter dem Namen "Scrubs" gespeichert.

Was ist die beste (performante) Lösung um nach "Scrubs - Die Anfänger" zu suchen und dabei den Datensatz "Scrubs" zu finden?

Zweites Beispiel: in der EPG Tabelle hat die Serie den Namen "Steel Buddies - Stahlharte Geschäfte", in der Tabelle theTVDB lautet der Name "Steel Buddies ? Stahlharte Geschäfte ". Wie kann ich nach "Steel Buddies - Stahlharte Geschäfte" suchen und den Datensatz "Steel Buddies ? Stahlharte Geschäfte" finden?
 
Bei Oracle gibt es im Package UTL_MATCH Funktionen um die Ähnlichkeit zweier Strings zu bestimmen. MySQL liefert da nichts Vergleichbares. Allerdings gibt es eine Umsetzung des Jaro-Winkler-Scores, die helfen könnte:
Jaro – Winkler SQL code

Damit kannst Du den String heraus suchen, der die beste Übereinstimmung mit dem gesuchten String hat. Inwieweit das performant ist und ob es gute Ergebnisse liefert kann ich nicht sagen, ich habe noch nicht damit gearbeitet.
 
Ich würde das zweistufig machen: jeweils Name und Index in zwei Arrays, alles was keine Buchstaben sind per preg_replace wegschmeissen, explode am Leerzeichen und dann mit foreach drübergehen und scores verteilen. Dann Zuordnung a-b ausgeben lassen und evtl händisch nachkorrigieren über manuellen overwrite und dann die Tabellen mergen.... So ganz automatisch wird das wohl nie 100% passen, bissl auf Sicht wirst du nacharbeiten müssen, aber halt nur ein mal :)

Edith: eventuell auch Levenstein Distanz, aber 100% korrekt wirds dann auch nicht sein...
 
Splitten beim ersten Zeichen das kein Whitespace oder Buchstabe ist und dann mit LIKE Scrubs% arbeiten.
 
Hatte es bei mir wie folgt gelöst:
Code:
WHERE IIf(Forms!Suchmaske!Frame180=1,((IIf(Forms!Suchmaske!Suchthema Is Not Null,(Literatur!Thema Like "*"+Forms!Suchmaske!Suchthema+"*"),"*") Or IIf(Forms!Suchmaske!Suchthema Is Not Null,(Literatur![Thema 2] Like "*"+Forms!Suchmaske!Suchthema+"*"),"*"))
Also mit Platzhalter nach dem Suchbegriff.
 
Da es sich um eine Medienbibliothek scheinbar handelt möchte ich hier die Tools TVRename und KODi und RMMaster Mal als Tipp lassen.

TV Rename fragt die Infos von thetvdb und IMDb ab, lädt nfo und Jpg runter.
RM Master kann massenweise Dateinamen umbenennen oder verändern.
KODi könnte das Ergebnis einlesen (sehr schnell) und natürlich wiedergeben. Genauso ist ein Export in eine DB oder XML Datei möglich.

Vielleicht hilft es ja das manuelle umbauen zu verhindern...
 
  • Gefällt mir
Reaktionen: BeBur
Zurück
Oben