Som någon har föreslagit kan du bara anpassa och använda fulltextsökning.
Om du väljer att ta den här vägen måste du aktivera fulltextsökning i de fält som krävs.
Jag antar att du kommer att kontrollera post_title och post_body (?), vilket kräver att du kör detta;
ALTER TABLE `posts` ADD FULLTEXT KEY `post_search` (`post_title`,`post_body`);
När det är gjort kan din sökfråga enkelt redigeras till att bli;
$sql = "SELECT * FROM `posts` WHERE MATCH(post_title,post_body) AGAINST '$search'";
Om du vill ha bättre matchning är det också möjligt att ge det en poäng och ordning efter det, vilket skulle kräva kod som liknar denna:
$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";
--- ANMÄRKNINGAR
För sökningen måste du räkna ut hur du kommer att söka.
I det senaste fallet jag använde liknande, hade jag helt enkelt ett formulär för söktermen (namnet "Sök") vilket resulterade i att $_POST['sökning'] skickades till servern.
Jag använde sedan;
$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)
}
Eftersom fulltextsökning kommer att bortse från bindestrecket, har du bara mellanslag kvar, vilket fungerar utmärkt för fulltext, om du väljer att använda poängsatta resultat.