sql >> Databáze >  >> RDS >> Mysql

Je možné zacházet s pomlčkami a mezerami stejně v SQL?

Jak někdo navrhl, stačí se přizpůsobit a použít fulltextové vyhledávání.

Pokud se rozhodnete použít tuto trasu, budete muset povolit fulltextové vyhledávání v požadovaných polích.

Předpokládám, že zaškrtnete post_title a post_body (?), které vás ke spuštění potřebují;

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

Když to uděláte, váš vyhledávací dotaz lze snadno upravit tak, aby se stal;

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

Pokud byste chtěli lepší shodu, je také možné dát mu skóre a pořadí, což by vyžadovalo kód podobný tomuto:

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

--- POZNÁMKY

Pro hledání si musíte ujasnit, jak budete hledat.

V posledním případě, který jsem použil podobný, jsem měl jednoduše formulář pro hledaný výraz (pojmenovaný "Hledat"), jehož výsledkem bylo odeslání $_POST['search'] na server.

Potom jsem použil;

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

Vzhledem k tomu, že fulltextové vyhledávání bude ignorovat pomlčku, zbydou vám pouze mezery, což funguje skvěle pro fulltext, pokud se rozhodnete používat bodované výsledky.




  1. Spring Data s typem Mysql JSON

  2. MySQL načte hodnoty NULL z dat CSV

  3. PostgreSQL sloupec 'foo' neexistuje

  4. Jak se připojit k mssql pomocí pdo přes PHP a Linux?