SQL mySQL Suche

Shadow1701

Cadet 4th Year
Dabei seit
Juli 2012
Beiträge
113
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?
 

Andreas_

Commander
Dabei seit
Jan. 2017
Beiträge
2.171
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.
 

mambokurt

Commander
Dabei seit
Aug. 2011
Beiträge
2.267
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...
 

BeBur

Lt. Commander
Dabei seit
Nov. 2018
Beiträge
1.140
Splitten beim ersten Zeichen das kein Whitespace oder Buchstabe ist und dann mit LIKE Scrubs% arbeiten.
 

Lost_Byte

Admiral
Dabei seit
Mai 2007
Beiträge
7.978
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.
 

Wanderer101

Lt. Commander
Dabei seit
Juli 2013
Beiträge
1.044
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...
 
Top