Vous devrez décomposer chaque mot et faire le SOUNDEX
comparaison, ce qui est exactement ce que fait cette fonction dont je vais vous parler.
Utiliser la fonction
Exemple d'utilisation :SELECT p.name FROM products p WHERE soundex_match('fiftythree', p.name, ' ')
Il prend 3 arguments :
- aiguille :le mot que vous recherchez
- haysack :la chaîne de mots parmi lesquels vous recherchez
- splitChar :le caractère d'espacement qui divisera la chaîne en un seul mot. Généralement c'est l'espace(‘ ‘)
Si un mot dans haystack ressemble à aiguille, la fonction renverra 1 et 0 sinon.
Création de la fonction dans votre base de données
Allez donc dans votre base de données (phpMyAdmin ou la ligne de commande) et exécutez ceci, vous n'avez qu'à le faire une fois) :
drop function if exists soundex_match;
delimiter $$
create function soundex_match (needle varchar(128), haystack text, splitChar varchar(1)) returns tinyint
deterministic
begin
declare spacePos int;
declare searchLen int default length(haystack);
declare curWord varchar(128) default '';
declare tempStr text default haystack;
declare tmp text default '';
declare soundx1 varchar(64) default soundex(needle);
declare soundx2 varchar(64) default '';
set spacePos = locate(splitChar, tempStr);
while searchLen > 0 do
if spacePos = 0 then
set tmp = tempStr;
select soundex(tmp) into soundx2;
if soundx1 = soundx2 then
return 1;
else
return 0;
end if;
end if;
if spacePos != 0 then
set tmp = substr(tempStr, 1, spacePos-1);
set soundx2 = soundex(tmp);
if soundx1 = soundx2 then
return 1;
end if;
set tempStr = substr(tempStr, spacePos+1);
set searchLen = length(tempStr);
end if;
set spacePos = locate(splitChar, tempStr);
end while;
return 0;
end
$$
delimiter ;
http://www.imranulhoque.com/ mysql/mysql-function-soundex-match-multi-word-string/