Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

reemplazar acentos durante una busqueda

Estas en el tema de reemplazar acentos durante una busqueda en el foro de Mysql en Foros del Web. Hola gente, tengo problema, es que estoy haciendo un query de busqueda, de los mas comun: un usuario ingresa un titulo de algo y busca ...
  #1 (permalink)  
Antiguo 08/02/2012, 11:30
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
reemplazar acentos durante una busqueda

Hola gente,
tengo problema, es que estoy haciendo un query de busqueda, de los mas comun:
un usuario ingresa un titulo de algo y busca en la tabla deseada,
el problema es cuando busco una palabra que puede estar o no con acentos.
para formule una query con php que si la palabra buscada tiene acentos la reemplace por la misma pero sin acentos.
ejemplo;
Código PHP:
Ver original
  1. <?
  2. $original      = "Tilcará";
  3. $resultadoReemplazo = "Tilcara";
  4. $sql ="SELECT * FROM ACTIVIDADES WHERE ( TITLE LIKE   '{$original}'  OR   TITLE LIKE  '{$resultadoReemplazo}'  )";
  5.  
  6. ?>

esto me resuelve cuando busco una palabra con acentos,
pero si yo busco Tilcara sin acentos no busca Tilcará,
ya que es muy dificil saber exactamente donde esta el acento y todas sus posibilidades.

Como podria resolver esto?
se me ocurrio que si se podria procesar el campo TITLE y reemplazar todas las letras
con acentos a sin acentos, pero solo en la busqueda, no UPDATE, sino arruino la db.

Gracias.
  #2 (permalink)  
Antiguo 08/02/2012, 11:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: reemplazar acentos durante una busqueda

Debes aclarar exactamente lo que quieres. Para empezar las palabras tienen tildes y debes escribirlas correctamente. Naturalmente, el cotejamiento te permitirá buscar sin preocuparte de las tildes, es decir, que si escribiste camión puedes encontrarlo escribiendo en el formulario camion, camión, cámion, camíon, etc. Para eso tienes dos opciones, cambiar el cotejamiento del campo implicado en la búsqueda a un cotejamiento de los terminados en _ci del charset que estés usando, o dejar como está el cotejamiento y cambiar el cotejamiento el vuelo durante la consulta.

Danos más datos.
  #3 (permalink)  
Antiguo 08/02/2012, 11:54
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: reemplazar acentos durante una busqueda

Hola Jurena, lo que me decis es correcto, ahora que me pedis mas datos y comprobe lo que me planteas me dio el resultado esperado, pero veo que si busco Bristó o Bristo me devuelte de estos tres registros de mi db, solo el el ultimo:
Código MySQL:
Ver original
  1. FROM `product`
  2. `prd_name` LIKE '%Bistro%'
  3. OR `prd_name` LIKE '%Bistró%'
  4. )
Bistr&oacute; M, Park Hyatt Mendoza //no lo encuentra
Anna Bistr&oacute; //no lo encuentra
Bar &amp; Bistro Antilco, Hotel el Faro
  #4 (permalink)  
Antiguo 08/02/2012, 12:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: reemplazar acentos durante una busqueda

Patriarka,
si tienes elegido para el campo prd_name el cotejamiento con terminación en _ci, deberías buscar así:
SELECT *
FROM `product` WHERE `prd_name` LIKE '%Bistro%'

Edito porque me asalta una duda: ¿no estarás escribiendo en la base de datos htmlentities? Supongo que tendrás Anna Bistró y no Anna Bistr&oacute;

si has hecho lo último, te recomiendo el cambio y no guardar así en la base. Pero si tienes mucho hecho, podremos buscar otras soluciones. Dinos cómo lo tienes.

Última edición por jurena; 08/02/2012 a las 12:25
  #5 (permalink)  
Antiguo 08/02/2012, 12:38
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: reemplazar acentos durante una busqueda

Gracias Jurena, esta ok mi priblema es este
Bistr&oacute;, pero mientras tanto me basta.
  #6 (permalink)  
Antiguo 08/02/2012, 15:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: reemplazar acentos durante una busqueda

Patriarka,
si quieres solución puedes hacer varios replace desde la base de datos del tipo UPDATE tutabla set nombrecampo = REPLACE(nombrecampo,'&oacute','ó'), y luego con las demás vocales; no creo que tardes mucho; también puedes usar la función PHP html_entity_decode aplicándola al texto. Las resolverás todas de un golpe, recorriendo el campo. Para eso pide ayuda, si es que la necesitas, en el foro PHP

Etiquetas: acentos, durante, php, query, reemplazar, select, sql, tabla, busquedas, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:51.