Autor Tema: Buscar letras que coincidan en un campo  (Leído 2363 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dels

  • Usuario Dedicado
  • ***
  • Mensajes: 123
  • Puntuación: 2
  • Sexo: Masculino
  • Desarrollador de software
    • Ver Perfil
    • Dels
Buscar letras que coincidan en un campo
« : 18 de octubre de 2013, 10:50:09 am »
Saludos comunidad.

Estoy intentando buscar dentro de una tabla String (character varying) 4 letras que coincidan en una palabra con posiciones casi exactas. Es muy parecido a un corrector ortográfico de un editor de texto, por ejemplo:

Si en mi campo "nombres", tengo un dato en string "arnold schwarzenegger" y el usuario en un formulario inserta "arnol shuawseneger" quisiera que me devolviera,  esa palabra que es muy parecido al que ya está escrito.

Espero haberme explicado bien :) y gracias.
Desarrollador de Software

Móvil: 00584123967062
E-Mail: kevin@dels.co.ve
Gnu/Linux User: #529556
Ubuntu User number: #33551
User identica.ca: k3v1nd315
Wikipedia ID: 1821960
Wikimedia-ve ID: KDels
flickr: http://www.flickr.com/photos/k3v1nd315/
Twitter: http://twitter.com/#!/k3v1ndels
IRC freenode

Desconectado oyepez003

  • Moderador Global
  • Usuario Dedicado
  • *****
  • Mensajes: 157
  • Puntuación: 8
  • Sexo: Masculino
  • La suerte esta en el conocimiento
    • Ver Perfil
    • Soluciones tecnológicas YepSua C.A.
Re:Buscar letras que coincidan en un campo
« Respuesta #1 : 18 de octubre de 2013, 11:14:06 am »
Hola dels.

Si es para comparar un grupo pequeño de valores puedes usar las funciones levenshtein o lsimilar-text

http://php.net/manual/en/function.levenshtein.php
http://www.php.net/manual/en/function.similar-text.php

Ahora si quieres validar cualquier palabra o conbinacion de palabras lo mejor ahi es usar un servicio, quizas algun api de Google o Yahoo.

Saludos.


--
Omar Yepez
http://www.yepsua.com The YepSua team
http://jquery4php.sourceforge.net/ The jQuery4PHP project
Sigueme: http://twitter.com/oyepez003

Desconectado dels

  • Usuario Dedicado
  • ***
  • Mensajes: 123
  • Puntuación: 2
  • Sexo: Masculino
  • Desarrollador de software
    • Ver Perfil
    • Dels
Re:Buscar letras que coincidan en un campo
« Respuesta #2 : 18 de octubre de 2013, 12:12:16 pm »
Gracias Oyepez003, se me olvidó indicar que esa comparación quisiera hacerlo es del lado de la base de datos, un script SQL. ¿Conocerás alguno?
Desarrollador de Software

Móvil: 00584123967062
E-Mail: kevin@dels.co.ve
Gnu/Linux User: #529556
Ubuntu User number: #33551
User identica.ca: k3v1nd315
Wikipedia ID: 1821960
Wikimedia-ve ID: KDels
flickr: http://www.flickr.com/photos/k3v1nd315/
Twitter: http://twitter.com/#!/k3v1ndels
IRC freenode

Desconectado oyepez003

  • Moderador Global
  • Usuario Dedicado
  • *****
  • Mensajes: 157
  • Puntuación: 8
  • Sexo: Masculino
  • La suerte esta en el conocimiento
    • Ver Perfil
    • Soluciones tecnológicas YepSua C.A.
Re:Buscar letras que coincidan en un campo
« Respuesta #3 : 18 de octubre de 2013, 02:46:38 pm »
Ah ok,

No, en SQL no tengo idea.

Lo mas probable es que exista algo asi en lenguajes de mas alto nivel como PLSQL o PGSQL etc... en SQL creo que esta dificil.

Saludos.

--
Omar Yepez
http://www.yepsua.com The YepSua team
http://jquery4php.sourceforge.net/ The jQuery4PHP project
Sigueme: http://twitter.com/oyepez003

Desconectado flavioSalas

  • Novato
  • *
  • Mensajes: 35
  • Puntuación: -1
    • Ver Perfil
Re:Buscar letras que coincidan en un campo
« Respuesta #4 : 29 de octubre de 2013, 11:11:06 pm »
Que tal como andan las cosas.
Te comento una vez me vi en la tarea de tener que hacer un buscador interno.
pues bien este metodo a continuacion lo copie y pege exacatmente igual. puedes guiarte para crear un sql por ajax usando esta funcion como respuesta. es viejo este script asi que revisalo y me avisas. tambie debes validar los datos antes de ejecutar (no coloque esa perta del codigo porque pertenece a otra clase abstracta)

Código: [Seleccionar]
<?php
function 
BuscarProductos ($words){
$FiltroSQL NULL;
$tablesRows = array('productos.keyword');
#una sola palabra:
if(!preg_match('<\s>',$words)){
for($i=0;$i<count($tablesRows);$i++){
$Union     = ($i==0)? NULL ' and ';
$FiltroSQL.= $Union $tablesRows[$i] .' like \'%'$words .'%\' ';
}
$FiltroSQL = (is_null($FiltroSQL)) ? $FiltroSQL ' and ('.$FiltroSQL.')';
}
#varias palabras:
else{
$words explode(" ",$words);
$Total count($tablesRows);
$i=0;
while($Total>$i){
for($k=0;$k<count($words);$k++){
$FiltroSQL.= ' and '$tablesRows[$i] .' like \'%'$words[$k] .'%\' ';
}
$i++;
}
}
# sql generado
  $sql' select productos.id from productos where 
(productos.status = 1) and 
(NOW() >=productos.fecha_in and NOW() < productos.fecha_out) and 
(productos.stock >0) and 
  (oferta >0) ' 
.$FiltroSQL;
# ejecuto el sql:
 
$query Mysql::MyQuery($sql);
$keysQuery NULL;
$Count   = 0;
while($key mysql_fetch_array($query)){
$keysQuery = (is_null($keysQuery)) ? $key[0] : $keysQuery ',' $key[0]; 
$Count++;
}
return array('idIn'=>$keysQuery,'totalRows'=>$Count);
}
Actualzado este script te devuelve un arreglo con dos registro

el primero  es un string con todos los id encontrados con la conicidencia de $word para que puedas filtrar luego
haciendo un where ... in($word['idIn'])
el segundo es el numero de registros encontrados, eso lo hice para para saber como calcular la paginacion
« Última Modificación: 29 de octubre de 2013, 11:38:33 pm por flavioSalas »

Desconectado dels

  • Usuario Dedicado
  • ***
  • Mensajes: 123
  • Puntuación: 2
  • Sexo: Masculino
  • Desarrollador de software
    • Ver Perfil
    • Dels
Re:Buscar letras que coincidan en un campo
« Respuesta #5 : 30 de octubre de 2013, 10:31:48 am »
Se ve bueno, voy a probar. Muchas Gracias.
Desarrollador de Software

Móvil: 00584123967062
E-Mail: kevin@dels.co.ve
Gnu/Linux User: #529556
Ubuntu User number: #33551
User identica.ca: k3v1nd315
Wikipedia ID: 1821960
Wikimedia-ve ID: KDels
flickr: http://www.flickr.com/photos/k3v1nd315/
Twitter: http://twitter.com/#!/k3v1ndels
IRC freenode