Pessoal, eu estou montando um projeto de orçamento de obras que utiliza índices de preço da EMOP (as famosas “tabelas EMOP”)
Essas tabelas não usam campo chave nem têm índices numéricos… e como vou ter que importar de tempos em tempos por conta dos índices, vou ter que usar as tabelas no padrão original…
Acontece que existe, por exemplo, uma tabela de materiais que só têm o código (texto) do material, descrição e unidade de medida de materiais e uma tabela de elementares que só tem o código de texto do material e o preço.
Como cada tabela dessas é em formato dbf acabei acrescentando mais um campo referente à versão dos arquivos que estou importando… de modo que ficaram assim:
CREATE TABLE tb_emop_materiais
(
emma_tx_versao
varchar(4) COLLATE utf8_bin DEFAULT NULL,
emma_tx_elementar
varchar(5) COLLATE utf8_bin DEFAULT NULL,
emma_tx_descricao
varchar(45) COLLATE utf8_bin DEFAULT NULL,
emma_tx_descr1
varchar(45) COLLATE utf8_bin DEFAULT NULL,
emma_tx_descr2
varchar(45) COLLATE utf8_bin DEFAULT NULL,
emma_tx_unid
varchar(6) COLLATE utf8_bin DEFAULT NULL,
FULLTEXT KEY INDEX_FT_EMOP_MATERIAIS
(emma_tx_versao
,emma_tx_elementar
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE tb_emop_elementar
(
emel_tx_versao
varchar(4) COLLATE utf8_bin DEFAULT NULL,
emel_tx_elementar
varchar(5) COLLATE utf8_bin DEFAULT NULL,
emel_vl_preco
decimal(21,4) DEFAULT NULL,
FULLTEXT KEY INDEX_FT_EMOP_ELEMENTAR
(emel_tx_versao
,emel_tx_elementar
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Para mostrar os dados da tabela de elementares eu criei uma consulta que usa o evento onrecord para pegar as informações da descrição (concatenando emma_tx_descricao, emma_tx_descr1 e emma_tx_descr2) na tabela de materiais… até aí tudo bem, funcionou tudo rapidinho e dentro do esperado… só que, até onde sei, o quick search não consegue ir nesse campo dinâmico que foi populado no evento onrecord e fazer buscas… ou seja, só consigo buscar os dados da tabela tb_elementar…
É possível fazer o quick search buscar em um campo dinâmico? Alguém já precisou fazer isso?
Tentei resolver o problema criando uma consulta a partir de uma view que já unia as duas tabelas mas ficou MUITO lento na hora de carregar… mesmo jogando índices de texto ficou lento…
Usando uma consulta nessa view resolvi o problema de buscar com o quick search mas a abertura da consulta ficou bem mais lenta… criei a view assim:
CREATE ALGORITHM=UNDEFINED DEFINER=root
@localhost
SQL SECURITY DEFINER VIEW vw_emop_elementar
AS select a
.emel_tx_versao
AS emel_tx_versao
,a
.emel_tx_elementar
AS emel_tx_elementar
,a
.emel_vl_preco
AS emel_vl_preco
,b
.emma_tx_descricao
AS emma_tx_descricao
,b
.emma_tx_descr1
AS emma_tx_descr1
,b
.emma_tx_descr2
AS emma_tx_descr2
from (tb_emop_elementar
a
join tb_emop_materiais
b
) where ((a
.emel_tx_versao
= b
.emma_tx_versao
) and (a
.emel_tx_elementar
= b
.emma_tx_elementar
));
Também usei o link com innerjoin mas não alterou a velocidade de abertura…
A dúvida é… é possível fazer o quick search funcionar em um campo criado dinamicamente??