Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile trattare i trattini e gli spazi allo stesso modo in SQL?

Come qualcuno ha suggerito, potresti semplicemente adattarti e utilizzare la ricerca full-text.

Se scegli di intraprendere questo percorso, dovrai abilitare la ricerca full-text nei campi richiesti.

Presumo che controllerai post_title e post_body (?), che hanno bisogno che tu lo esegua;

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

Al termine, la query di ricerca può essere facilmente modificata per diventare;

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

Se desideri una migliore corrispondenza, è anche possibile assegnargli un punteggio e un ordine in base a quello, che richiederebbe un codice simile a questo:

$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";

--- NOTE

Per la ricerca, devi capire come cercherai.

Nell'ultima istanza ho usato qualcosa di simile, avevo semplicemente un modulo per il termine di ricerca (denominato "Cerca") con il risultato che $_POST['cerca'] veniva inviato al server.

Ho quindi utilizzato;

$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)
}

Poiché la ricerca fulltext ignorerà il trattino, ti rimangono solo spazi, il che funziona benissimo per fulltext, se scegli di utilizzare i risultati con punteggio.