Foros del Web » Programando para Internet » PHP »

¿Alternativa a LIKE?

Estas en el tema de ¿Alternativa a LIKE? en el foro de PHP en Foros del Web. ¿Alternativa a LIKE? Hola, estoy necesitando hacer una consulta para filtrar resultados según palabras claves ingresadas en un buscador. funciona bien como lo estoy haciendo ...
  #1 (permalink)  
Antiguo 06/08/2007, 11:47
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 10 meses
Puntos: 1
¿Alternativa a LIKE?

¿Alternativa a LIKE?

Hola, estoy necesitando hacer una consulta para filtrar resultados según palabras claves ingresadas en un buscador. funciona bien como lo estoy haciendo pero el tema es que LIKE hace distinción entre minúsculas y mayúsculas o si le ponemos o no los tildes. ya que al parecer busca la palabra exacta ingresada en el buscador. Ej: tengo un producto que esta dentro de la categoría Termos, si en el buscador ingreso "Termos" me sale en los resultados pero si ingreso "termos" no aparece. Intuyo que lo mismo pasa con los tíldes. ¿Hay alguna alternativa LIKE que no sea sensible a estas diferencias? ¿o tal vez alguna función de php que me pueda solucionar el inconveniente?

Gracias.

Saludos...
  #2 (permalink)  
Antiguo 06/08/2007, 11:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: ¿Alternativa a LIKE?

Puedes usar MATCH.. AGAINST que es el ideal cuando quieres hacer busquedas por texto, te recomiendo busques en Google hay varios tutoriales para explicar el uso de MATCH.. AGAINST..

Saludos.
  #3 (permalink)  
Antiguo 07/08/2007, 16:43
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: ¿Alternativa a LIKE?

Gracias GatorV. Voy a ver si encuentro algo al respecto.

Saludos
  #4 (permalink)  
Antiguo 07/08/2007, 17:27
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: ¿Alternativa a LIKE?

O teóricamente con poner el campo como binario también debería funcionarte.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 08/08/2007, 07:47
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: ¿Alternativa a LIKE?

Hola Nicolás. No me queda muy claro a que te referís con lo de campo como binario. La realidad es que la búsqueda se realiza en varias de las columnas, que la mayoría son latin1 latin_bin. ¿Te referís a eso? Si es eso, no funciona.

GatorV, lo que me comentabas es interesante, y encontré algunas cosas para leer, pero no me soluciona el tema de las minúsculas y mayúsculas o los tildes. Por lo que lei sirve para realizar búsquedas mas complejas con mas de una frase. Creo que lo voy a usar, pero no me soluciona el problema que genero este post. De todas formas gracias.

Dejo un código que encontré por ahí al respecto por si a alguien le viene bien

Código PHP:
 <?php
//cadena de conexion
mysql_connect("host","usuario","password");
//DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($busqueda<>''){
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$busqueda);
$numero=count($trozos);
if (
$numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$cadbusca="SELECT REFERENCIA, TITULO FROM ARTICULOS WHERE VISIBLE =1 AND DESARROLLO LIKE '%$busqueda%' OR TITULO LIKE '%$busqueda%' LIMIT 50";
} elseif (
$numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
$cadbusca="SELECT REFERENCIA, TITULO , MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) AS Score FROM ARTICULOS WHERE MATCH ( TITULO, DESARROLLO ) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50";
}
$result=mysql("teleformacion"$cadbusca);
While(
$row=mysql_fetch_object($result))
{
//Mostramos los titulos de los articulos o lo que deseemos...
$referencia=$row->REFERENCIA;
$titulo=$row->TITULO;
echo 
$referencia." - ".$titulo."<br>";;
}
?>
Si alguien me sabe orientar en como hacer para que el buscador no haga diferencia entre mayúsculas minúsculas y palabras con o sin tildes desde ya eternamente agradecido.

Saludos...

Última edición por Artefio; 08/08/2007 a las 08:22
  #6 (permalink)  
Antiguo 08/08/2007, 08:01
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: ¿Alternativa a LIKE?

No, hacete una tabla nueva con un campo y ponelos como varchar. Cargale dos registros, algo como "Hola" en uno y "hola" en otro.
Si tiras un like sobre eso te dará dos registros.

Ahora bien, si marcas ese campo como binary (En el sqlYog esta como propiedad), al tirar el query nuevamente tendrás un solo registro.

Creo que en el código sql si, es "collate latin1_bin", pero no recuerdo, me suena mas a hacer un "Alter tuTabla add `un_campo` varchar(255) binary default NULL".
Y si es un campo text lo tenes que setear como blob si mal no recuerdo.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #7 (permalink)  
Antiguo 08/08/2007, 08:29
 
Fecha de Ingreso: junio-2007
Mensajes: 76
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: ¿Alternativa a LIKE?

Re otra ves Nicolás. Recién estaba editando lo que escribí y veo que respondistes de nuevo. Los campos que estoy usando si son varchar (255) y lo demás como me comentas. Los campos text también los tengo como blob, pero la consulta me sigue diferenciando las mayúsculas de las minúsculas. Creo que tiene que ir por otro lado. De todas formas gracias por responder.

Saludos...
  #8 (permalink)  
Antiguo 08/08/2007, 08:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: ¿Alternativa a LIKE?

Dale una leida a esto:
http://dev.mysql.com/doc/refman/5.0/...nsitivity.html

Saludos.
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 09:51.