Suchfunktion

Spranta

Erfahrenes Mitglied
Hallo

ich möchte eine Suchfunktion für eine Filmdatenbank programmieren. Allerdings scheitere ich bei Eingaben die nicht den Orginalen Titeln entsprechen. Sprich wenn der Film "Herr Bello" heist und einer nur "Her Bello" eingibt oder "Bello" dan findet er den Film schon nicht. Die Variante mit "Bello" könnte man ja so lösen das man bei der SQL Abfrage % davor und am Ende macht. Allerdings ist dan die Sache mit den Tippfehlern nocht nicht beseitigt. Wie stelle ich dies am besten an?

Gruß
Spranta
 
Splitte das Suchwort auf, sobald ein Keerzeichen kommt, und mach aus jedem Suchwort eine WHERE %Suchwort% Anweisung und verknüpfe diese mit "OR".

Dabei solltest du die Zeichen in der Suche auf mindestens 4 stellen und dann eben einen SQL bilden der ungefähr so aussieht:
Suchwort Her Bello

PHP:
SELECT Titel, ID FROM Filme WHERE (Titel LIKE ’%Her%’ OR Titel LIKE ’%Bello%’) GROUP BY Titel, ID

Und das dürfte dann passen..
 
Du kannst dir noch im PHP-Handbuch folgende Funktionen anschauen, die Strings auf unterschiedliche Art und Weisen miteinander vergleicht.

  • levenshtein
  • similar_ text
  • soundex
 
ja aber z.b. bei folgenden Beispielt geht das net

Code:
ID     Film
1      Der Herr der Ringe - Die Gefährten
2      Der Herr der Ringe - Die zwei Türme
3      Der Herr der Ringe - Die Wiederkehr des Königs

Wenn jetzt einer nur Der Herr der Ringe 2 eingibt dann geht das ja net weil er nur 1 film anzeigen soll immer.
 
ja eben.. deswegen meine OR-Abfrage... wenn dann ein Kriterium gefunden wird von den Suchwörtern, zeigt er es auf jeden Fall an. Egal ob eine 2 dabei ist ODER nicht ;)


edit:
Beispiel:
Der Herr der Ringe 2 = Suchwort

dann ist der SQL für die Abfrage der folgende:
SELECT Titel, ID FROM Filme WHERE (Titel LIKE ’%Der%’ OR Titel LIKE ’%Herr%’ OR Titel LIKE ’%der%’ OR Titel LIKE ’%Ringe%’ OR Titel LIKE ’%2%’) GROUP BY Titel, ID

Als Resultat bringt er dann nur die Titel, die eines der Wörter im Namen haben und warden dann nach Teteil bzw. ID zusammengefügt … so hast du zumidnest keine Doppeleinträge..
 
Zuletzt bearbeitet:
Zurück