2016-04-14 4 views
-2

Welcher Suchalgorithmus sollte ich verwenden, um Ergebnisse zu erhalten, wenn ein Benutzer nach einem Titel eines Buches sucht?Entspricht der nächsten Zeichenkette einer bestimmten Zeichenkette

Wenn ein Buch existiert, sollte der Titel zurückgegeben werden, ansonsten müssen die Buchtitel angezeigt werden, die sich in der Nähe befinden.

Der erste Fall ist einfacher, nur eine Zeichenfolge zu suchen. Ich brauche, wie man den zweiten Fall löst, den die meisten Webseiten verwenden.

Die Buch-Tabelle enthält die Felder Kategorie, Klasse und Titel. Ich habe den folgenden Code ausprobiert und erhalte Ergebnisse, wenn ich den genauen Titel gebe. Ich möchte, dass das System Titel gibt, die eng miteinander verwandt sind.

$title=isset($_GET['title'])?$_GET['title']:NULL; 
     //$code=isset($_GET['code'])?$_GET['code']:NULL; 
     $class=isset($_GET['class'])?$_GET['class']:NULL; 
     $cat=isset($_GET['category'])?$_GET['category']:NULL; 
     if(isset($title)) 
     $qry="select * from books where quantity>0 and title='$title' "; 
     else{ 
      $qry="select * from books where quantity>0 "; 
      if(isset($class)) $qry.=" and class='$class' "; 
      if(isset($cat)) $qry.=" and category='$cat' "; 
     } 
+0

Wie werden Buchtitel gespeichert? Wo sind sie gespeichert? Was hast du schon probiert? Wir sind nicht hier, um zu löffeln. – Daniel

+0

@Stah Ich habe hinzugefügt, was ich versucht habe. – user6181297

Antwort

1

Nun, zunächst würde ich Prepared Statements empfehle SQL-Injection über Ihren aktuellen Code zu vermeiden, aber der LIKE-Operator in SQL verwenden, sollte im zweiten Fall arbeiten.

ändern

`select * from books where quantity > 0 and title = '$title'` 

zu

`select * from books where quantity > 0 and title LIKE '%$title%'` 

Was dies bedeutet es überprüft auch für Briefe rund um das Wort fehlt. Wenn also der Titel "Hase" gleich wäre, dann wären sowohl "Weißes Hase", "Hase" als auch "Hase" die Ergebnisse.

p.s. Leerzeichen kostet nichts

+0

Okay. Was ist, wenn Benutzer "rabit" (Tippfehler) und dann, wie man alle in Verbindung stehenden Bücher anzeigt? – user6181297

+0

Es gibt keine integrierte Möglichkeit, dies in SQL zu tun. Überprüfen Sie http://StackOverflow.com/Questions/487003/How-To-Detect-Atypo-in-Aproduct-Search-and-Suggest-Possible-corrections – Daniel

+0

Wie Sie die Wörter in Titel basierend auf weiß teilen Räume und suchen Sie jedes Wort? – user6181297