Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-06-2012
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
Exclamation problema con consulta sql con Match Against

Que tal gente, tengo un problema. Estoy desarrollando una aplicacion de gestion de productos con delphi 2010 y mysql, conectado mediante ADO. De cada producto tengo, entre muchos campos, uno que se llama "descripcion" que es de tipo TEXT donde guardo "tags" de cada producto para poder realizar una busqueda avanzada, por ejemplo de un televisor un tag posible puede ser 32" (pulgadas), entonces en la busqueda avanzada enumero X cantidad de tags y me busca aquellos productos que en su descripcion contengan alguno de los tag enumerados. Por ejemplo tengo un Televisor que tiene de tags 32" - HDMI - HD (un tag abajo del otro) y otro Televisor con que tiene 32" USB HD, bien, ahora yo en delphi tengo un Memo donde pongo 32" y HD, nuevamente separados por un enter, entonces para realizar la busqueda tengo el siguiente codigo
Código Delphi [-]
for i := 0 to descripcion.Lines.Count - 1 do
      if i = 0 then
        sql:= sql+'and ((MATCH(p.descripcion) AGAINST ("'+
          descripcion.Lines[i]+'"))'
      else
        sql:= sql+'or (MATCH(p.descripcion) AGAINST ("'+
          descripcion.Lines[i]+'"))';
    if FBusquedaAvanzada.descripcion.Lines.Count > 0 then
      sql:= sql+')';

Aclaro que antes hay un "AND" porque hay varias cosas atras.

Bien el problema es que me tira la siguiente excepcion:

Project Project1.exe raised exception class EOleException with message '[MySQL][ODBC 5.1 Driver][mysqld-5.5.8-log]The used table type doesn't support FULLTEXT indexes'.

y luego su correspondiente error:

[MySQL][ODBC 5.1 Driver][mysqld-5.5.8-log]The used table type doesn't support FULLTEXT indexes.

Como puedo resolverlo? (se que es por culpa del MATCH AGAINST pero nose como resolverlo)

Saludos y espero haber sido claro. Gracias!

Última edición por kdemia fecha: 27-06-2012 a las 08:48:58. Razón: titulo incompleto
Responder Con Cita
  #2  
Antiguo 27-06-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, el mensaje de error es muy claro. La función Match() sirve para hacer búsquedas de "texto completo" y para ello tu tabla debe tener un índice de texto completo. Pero sólo las tablas de tipo MyIsam soportan este tipo de índices, por lo que si estás usando tablas InnoDb, tendrás que hacer la búsqueda de otra forma.

// Saludos
Responder Con Cita
  #3  
Antiguo 27-06-2012
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
Gracias roman por responder. Me doy cuenta que soy muy ignorante en este tema, a que se refiere con texto completo? en el caso que no lo pueda resolver de esta manera de que otra manera puedo resolverlo? aplicando MySQL y Delphi con el componente ADO
Gracias!
Responder Con Cita
  #4  
Antiguo 27-06-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En lugar de Match() puedes usar el operador like con %:

Código SQL [-]
select ... from ...
where
  ... and
  (
    p.descripcion like '%32 "%' or
    p.descripcion like '%HD%' or
    ...
  )

// Saludos
Responder Con Cita
  #5  
Antiguo 27-06-2012
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
y pero con el operador LIKE y los comodines si yo pusiera H me lo encontraria ya uqe H es parte de HD lo mismo si pusiera 32 me encontraria el 32" :/, hay alguna manera de crear algun procedimiento almacenado que contenga ese tipo de busqueda? yo encontre este articulo donde la persona hace una funcion almacenada, pero me tira 10 millones de errores cuando ejecuto ese sql
Responder Con Cita
  #6  
Antiguo 27-06-2012
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
Estuve leyendo y aprendi bastante jaja. Ya esta cambie el motor de la tabla productos a MyISAM y cree el indice FULLTEXT y funciono perfecto, MUCHISIMAS GRACIAS
Responder Con Cita
Respuesta



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
LCASE dentro del MATCH tramjauer MySQL 2 04-11-2007 21:07:45


La franja horaria es GMT +2. Ahora son las 10:30:10.


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
Copyright 1996-2007 Club Delphi