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

PHP/MySQL:Zvýrazněte výsledky dotazu SOUNDS LIKE

Všimněte si, že SOUNDS LIKE nefunguje tak, jak si myslíte. Není to ekvivalentní s LIKE v MySQL, protože nepodporuje % zástupný znak.

To znamená, že váš dotaz nenajde "John David" při hledání "John". To by mohlo být přijatelné, pokud je to jen vaše záložní řešení, ale není to ideální.

Zde je tedy jiný návrh (který by mohl vyžadovat zlepšení); nejprve použijte PHP soundex() funkce pro nalezení soundexu klíčového slova, které hledáte.

$soundex = soundex($word);
$soundexPrefix = substr($soundex, 0, 2); // first two characters of soundex
$sql = "SELECT lastname, firstname ".
    "FROM table WHERE SOUNDEX(lastname) LIKE '$soundexPrefix%' ".
    "OR SOUNDEX(firstname) LIKE '$soundexPrefix%'";

Nyní budete mít seznam křestních jmen a příjmení, která mají vágní podobnost ve zvuku (může to být hodně položek a možná budete chtít prodloužit délku předpony soundex, kterou používáte pro vyhledávání). Poté můžete vypočítat Levenshteinovu vzdálenost mezi zvukovým výrazem každého slova a hledaným výrazem a podle toho seřadit.

Za druhé, měli byste se podívat na parametrizované dotazy v MySQL, abyste se vyhnuli chybám SQL injection.



  1. mazání entit v kaskádě nefunguje v relaci ManyToMany

  2. SQL SELECT pro začátečníky

  3. Klient příkazového řádku MySQL pro Windows

  4. Zvýšit hodnotu dávky MySQL?