Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-02-2008
farrop farrop is offline
Miembro
 
Registrado: Feb 2006
Posts: 12
Poder: 0
farrop Va por buen camino
Exclamation Busqueda Similar??

Hola a todos.
Estoy haciendo un ABM Cliente con PostgreSQL 8.2, sencilo verdad, pero lo que quiero hacer es que no me permita cargar clientes con nombres iguales (tambien facil) o parecidos (ahi el problema).
Por ejemplo, si cargo
Código:
"Manuel Gonzalez Espinosa"
, y vieno otro y quiere cargar
Código:
"Manuel Gonzalez Espinoza" (con z al final)
que me avise que ya hay cargado uno muy parecido, y q verifique si no se trata de la misma persona, pues la diferencia es solo una letra y eso ya hace la diferencia si comparo campos iguales, lo mismo si cargo
Código:
"Gonzalez Espinosa, Manuel"
la unica diferencia en la disposicion de nombres.
Intente hacer con un like, pero, me aparecen todos los que se llaman Manuel, sim importar el apellido, o no me encuntra las diferencias como la s por la z o vocales con acentos.
Si hay forma de resolverlo, me gustaria q me ayudaran.
Saludos
Farrop
Responder Con Cita
  #2  
Antiguo 01-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: Jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 20
Delphius Va camino a la fama
Cita:
Empezado por farrop Ver Mensaje
Hola a todos.
Estoy haciendo un ABM Cliente con PostgreSQL 8.2, sencilo verdad, pero lo que quiero hacer es que no me permita cargar clientes con nombres iguales (tambien facil) o parecidos (ahi el problema).
Por ejemplo, si cargo
Código:
"Manuel Gonzalez Espinosa"
, y vieno otro y quiere cargar
Código:
"Manuel Gonzalez Espinoza" (con z al final)
que me avise que ya hay cargado uno muy parecido, y q verifique si no se trata de la misma persona, pues la diferencia es solo una letra y eso ya hace la diferencia si comparo campos iguales, lo mismo si cargo
Código:
"Gonzalez Espinosa, Manuel"
la unica diferencia en la disposicion de nombres.
Intente hacer con un like, pero, me aparecen todos los que se llaman Manuel, sim importar el apellido, o no me encuntra las diferencias como la s por la z o vocales con acentos.
Si hay forma de resolverlo, me gustaria q me ayudaran.
Saludos
Farrop
Hola farrop,
Un tema bastante similar fue tratado en los foros. No recuerdo bien como se ha llegado a la solución, no te sabría decir si emplear LIKE es una buena opción.
Yo recomendaría que no sea el motor de base de datos quien asuma esta responsabilidad. Déjala que la asuma tu aplicación.

Parte de tu problema/solución se puede conseguir con esto.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 01-02-2008
hecospina hecospina is offline
Miembro
 
Registrado: Oct 2007
Posts: 202
Poder: 11
hecospina Va por buen camino
Hola

No crees que es mas facil hacer la validacion por una llave primaria o unica, como un codigo ?

Por ejemplo la identificacion personal

En Colombia usamos el documento que es la cedula de ciudadania, unica para cada uno de nosotros, en otros lugares el el numero del seguro social, o la licencia de conduccion

Si se adiciona primero este codigo sera mas facil controlar que no esten duplicados
Responder Con Cita
  #4  
Antiguo 01-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: Jul 2004
Ubicación: Salta, Argentina
Posts: 5.598
Poder: 20
Delphius Va camino a la fama
hecospina, tienes razón. Si se emplea el DNI o algún codigo como ese que es único basta y sobra...

Pero quien sabe... puede que por algún motivo no se le permita tener registrado el DNI, NIF, etc. En este caso se podría crear una clave para persona con algún algoritmo Hash.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 01-02-2008
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: Sep 2007
Posts: 1.057
Poder: 12
juanelo Va por buen camino
Que tal,
Miral lo yo hago para cuando quiero hacer esto o algo parecido es colocar en el edit del nombre una funcionalidad que lo que hace es filtrando los nombres de los clientes a medida que se va tecleando, de esta manera el usario visualmente se va dando cuenta si existe un(os) nombre(s) parecido.

Coloco hasta abajo un Grid (en realidad manejo el cxGrid de devExpress) y ahi voy "recortando" la informacion a medida que se teclea.

Ventaja de este metodo, es que de manera "intuitiva" el usuario se da cuenta.
Desventaja, es que hay que cargar con todos los registros de la tabla en este caso de clientes, pero normalmente (al menos en mis aplicaciones) los clientes no pasan de por lo regular de unos 20,000 lo que con firebird y devExpress no representa mayor problema.

Saludos
Responder Con Cita
  #6  
Antiguo 01-02-2008
farrop farrop is offline
Miembro
 
Registrado: Feb 2006
Posts: 12
Poder: 0
farrop Va por buen camino
Busqueda Similar

Hola otra vez.
Como clave principal uso un ID numerico, podria usar algo como el DNI, aca es el RUC, pero hay varias personas que utilizan dos o mas veces su RUC (para hacer compras) para tener detallado en que concepto lo usan, pero eso no va al caso.
El tema es que cuando viene un cliente no ocacional, el usuario busca si esta cargado, y no revisa con atencion y como no encontro a simple vista, ya carga otro cliente, produciendose asi muchos clientes repetidos,pero con solo una letra distinta, teniendo asi:

Código:
 Manuel Gonzalez Espinoza
Manuel Gonzalez Espinosa
Gonzalez Espinosa, Manuel 
Manuel González Espinoza
Es por eso que quiero que al dar de alta a un cliente nuevo, busque si hay parecidos para no duplicarlo.

Me gusta mucho el metodo de "Delphius", lo voy a probar, y tambien el de "juanelo", y veo cual es mas efectivo.

¿¿Lo que aun me gustaria saber es si hay forma de hacer la Distancia entre palabras (Algoritmo de Levenshtein) mediante SQL solamamente?? o algo similar

Muchas gracias por su ayuda.

Última edición por farrop fecha: 01-02-2008 a las 18:09:04. Razón: Correcion Gramatical
Responder Con Cita
  #7  
Antiguo 01-02-2008
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: Dec 2004
Posts: 882
Poder: 14
Héctor Randolph Va por buen camino
Cita:
Empezado por farrop
¿¿Lo que aun me gustaria saber es si hay forma de hacer la Distancia entre palabras (Algoritmo de Levenshtein) mediante SQL solamamente?? o algo similar
Puedes implementar la función en PL/SQL dentro de la B.D. Te dejo este enlace http://www.clubdelphi.com/foros/showthread.php?t=50441

Trabajé con una B.D. de Oracle con más de 100,000 personas registradas, elaboré una búsqueda por aproximación con el Algoritmo de Levenshtein.

Al principio resultó muy lento, pero fui refinando la búsqueda. Construí tres tablas auxiliares para el nombre y los apellidos. Estas tablas funcionan como índices sobre los cuáles hago la búsqueda.

Finalmente el resultado fue aceptable, la búsqueda en el peor de los casos tarda alrededor de 5 segundos.

No descartes la idea del algoritmo de Levenshtein, pero advierto que es necesario algo de trabajo para obtener buenos resultados.

Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
funcion similar a PoS ? waly2k1 Varios 8 27-02-2008 22:23:32
1stClass o similar vroa74 Varios 0 20-09-2007 21:49:56
similar a dbgrid en php jgutti PHP 5 10-05-2007 19:46:45
Php + grid o similar jgutti PHP 2 25-05-2006 00:12:52
StringGrid o Similar jfontane Varios 4 24-06-2003 08:46:02


La franja horaria es GMT +2. Ahora son las 15:13:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi