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.