Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist es möglich, Bindestriche und Leerzeichen in SQL gleich zu behandeln?

Wie jemand vorgeschlagen hat, könnten Sie einfach die Volltextsuche anpassen und verwenden.

Wenn Sie sich für diesen Weg entscheiden, müssen Sie die Volltextsuche in den erforderlichen Feldern aktivieren.

Ich gehe davon aus, dass Sie post_title und post_body (?) überprüfen werden, was Sie zum Ausführen benötigt;

ALTER TABLE `posts` ADD FULLTEXT KEY `post_search` (`post_title`,`post_body`);

Wenn das erledigt ist, kann Ihre Suchanfrage einfach bearbeitet werden, um zu werden:

$sql = "SELECT * FROM `posts` WHERE MATCH(post_title,post_body) AGAINST '$search'";

Wenn Sie eine bessere Übereinstimmung wünschen, ist es auch möglich, eine Punktzahl und eine Reihenfolge danach zu vergeben, was einen ähnlichen Code wie diesen erfordern würde:

$sql = "SELECT *, MATCH(post_title, post_body) AGAINST ('{$search}') AS score ".
       "FROM `posts` WHERE MATCH(post_title, post_body) AGAINST ('{$search}') ORDER BY `score` DESC";

--- HINWEISE

Für die Suche müssen Sie sich überlegen, wie Sie suchen werden.

Im letzten Fall habe ich ähnliches verwendet, ich hatte einfach ein Formular für den Suchbegriff (mit dem Namen "Search"), was dazu führte, dass $_POST['search'] an den Server gesendet wurde.

Ich habe dann verwendet;

$search = (array_key_exists('search', $_POST) && is_string($_POST['search'])) ? mysql_real_escape_string($_POST['search'], $c) : FALSE ;
if ($search) {
    // Do the fulltext query requires (See above)
}

Da die Volltextsuche den Bindestrich ignoriert, bleiben Ihnen nur Leerzeichen, was für den Volltext hervorragend funktioniert, wenn Sie sich für die Verwendung von bewerteten Ergebnissen entscheiden.