sql >> Databasteknik >  >> RDS >> Mysql

Är det möjligt att behandla bindestreck och mellanslag på samma sätt i SQL?

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.




  1. Sanering av arrayvärden innan mysql-infogningar

  2. MySQL PDO hur man binder params för IN()

  3. Hur använder man en uppsättning värden från PHP i 'IN'-satsen i mysql-frågan?

  4. Hur man spårar sidvisningar utan att slå MySQL DB