Requête de recherche avec accentuation des mots

Contenu du snippet

Recherche rapide en coldfusion/sql server avec accentuation et caractères spéciaux :

Cette solution est une solution couteuse en CPU.
Pour être plus efficace, il faut créer des champs ( ou une table ) spéciale pour la recherche, en ayant au préalable enlevé les caractères spéciaux/accentuations.

Source / Exemple :


<cfquery name="recherche" datasource="database">
	SELECT *
	FROM table
	WHERE 1=1 <!--- astuce pour ne mettre que des AND/OR --->
	<cfif IsDefined("form.mots") AND TRIM(form.mots) neq "">
		<cfset form.mot=LCase(ReplaceList(form.mot, "à,â,ã,á,ä,é,è,ê,ë,î,ï,ì,í,ô,ö,õ,ò,ó,ù,ú,û,ü,ç,ñ", "a,a,a,a,a,e,e,e,e,i,i,i,i,o,o,o,o,o,u,u,u,u,c,n"))>
		<cfloop list="#form.mot#" delimiters=" " index="mot">
			<cfif Len(Trim(mot)) GT 2><!--- Ne prendre que les mots de plus de 2 caractères --->
				AND LOWER(
					REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
					champ_recherche
					,'à','a'), 'â','a'), 'ã','a'), 'á','a'), 'ä','a'), 'é','e'), 'è','e'), 'ê','e'), 'ë','e'), 'î','i'), 'ï','i'), 'ì','i'), 'í','i'), 'ô','o'), 'ö','o'), 'õ','o'), 'ò','o'), 'ó','o'), 'ù','a'), 'ú','u'), 'û','u'), 'ü','u'), 'ç','c'), 'ñ','n')
					)
					like
					'%#mot#%'
			</cfif>
		</cfloop>
	</cfif>
</cfquery>

Conclusion :


Les commentaires/améliorations sont les bienvenus :-)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.