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

Er det muligt at behandle bindestreger og mellemrum ens i SQL?

Som nogen har foreslået, kan du bare tilpasse og bruge fuldtekstsøgning.

Hvis du vælger at tage denne rute, skal du aktivere fuldtekstsøgning i de felter, der skal bruges.

Jeg antager, at du vil tjekke post_title og post_body (?), hvilket kræver, at du kører dette;

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

Når det er gjort, kan din søgeforespørgsel nemt redigeres til at blive;

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

Hvis du gerne vil have bedre matchning, er det også muligt at give det en score og rækkefølge efter det, hvilket ville kræve kode svarende til denne:

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

--- NOTER

Til søgningen skal du finde ud af, hvordan du vil søge.

I det sidste tilfælde jeg brugte lignende, havde jeg simpelthen en formular til søgetermen (Benævnt "Søg"), hvilket resulterede i, at $_POST['søg'] blev sendt til serveren.

Jeg brugte så;

$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 fuldtekstsøgning vil se bort fra bindestregen, står du tilbage med kun mellemrum, hvilket fungerer godt til fuldtekst, hvis du vælger at bruge scorede resultater.




  1. MongoDB aggregerede forespørgsler vs. MySQL SELECT field1 FROM table

  2. Ændres ressource-id hver gang en applikation starter

  3. CSV eksport/import med PHPExcel

  4. MySQL betinget ORDER BY ASC/DESC for datokolonnen