Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   busqueda incremental con mysql (https://www.clubdelphi.com/foros/showthread.php?t=53064)

schaka 09-02-2008 01:52:53

busqueda incremental con mysql
 
Hola que tal , soy nuevo en el foro y me he enfrentado a mi primer problema tratanto de realizar una busqueda incremental utilizando una conexion zeos para poder unir mysql con delphi.
bueno mi problema es que necesito una busqueda de una cadena que recojo de un tedit la cual tiene espacios entre si, por ejemplo: "casa gato mujer amigo" esta cadena es la que leo de un edit, y me interesa hacer la busqueda incremental en los registros donde tenga la ocurrencia de "casa", "gato", "mujer", "amigo" , ya sea en un solo registro o varios , ademas de esto sin importar la posicion de ellos , es decir, si primero aparece en el registro "amigo" y despues esta "gato", o viceversa, espero me puedan ayudar, les pongo mi codigo que tengo para mi busqueda incremental.


procedure TForm1.Edit1Change(Sender: TObject);
begin

ZQuery1.close;
ZQuery1.sql.clear;
ZQuery1.sql.add('Select * from lista');
ZQuery1.sql.add('where lista like "%'+Edit1.Text+'%") ;
ZQuery1.open;


end;

esta funcion esta ligada a un evento de mi edit de onchange, entonces cada vez que escriba algo en el tedit se ejecutara el codigo que les he puesto.
Espero me puedan ayudar

keyboy 09-02-2008 02:31:16

En términos generales podrías comenzar separando las palabras en una lista; cosa que puedes hacer fácilmente asignando el contenido del Edit a la propiedad CommaText de un TStringList. No importa que no haya comas, el TStringList considera los espacio igualmente como separadores.

Luego recorrerías la lista para construir dinámicamente la condición de la sentencia, que sería más o menos así:

Código SQL [-]
where
  campo like "%casa%" or
  campo like "%gato%" or
  campo like "%mujer%" or
  campo like "%amigo%"

es decir, una de estas líneas por cada palabra del Edit.

No obstante, veo que usas las componentes Zeos, lo que me lleva a pensar que utilizas MySQL. De ser así, pienso que te sería mejor opción crear un índice FULL TEXT sobre el campo en cuestión:

Código SQL [-]
alter table lista add fulltext(campo)

ya que, entonces, puedes utilizar la maquinaria de MySQL para este tipo de búsquedas. Por ejemplo:

Código SQL [-]
select * from lista
where match(campo) against('casa gato mujer amigo')

Bye

schaka 09-02-2008 04:56:06

gracias por tu ayuda.


La franja horaria es GMT +2. Ahora son las 09:13:17.

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