[RESOLVIDO] - Dúvida sobre alterar o Quick Search

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??

Infelizmente campos ‘virtuais’ criados na hora na consulta ele não vai conseguir ler no QUICK SEARCH.

Para ficar lento a VIEW com índices, quantos milhões de registro tem essas Tabelas EMOP Relacionadas, ou seu servidor é compartilhado e tem 128MB de RAM? ai não tem jeito de fazer mágica.

Script php para dar uma olhada na config do seu servidor:

<?php

echo 'Memory in use: ' . memory_get_usage() . ' ('. memory_get_usage()/1024 .'M) <br>';
echo 'Peak usage: ' . memory_get_peak_usage() . ' ('. memory_get_peak_usage()/1024 .'M) <br>';
echo 'Memory limit: ' . ini_get('memory_limit') . '<br>';

?>

Se tiver acesso ao terminal SSH, use também: free -htl

Isso fora o servidor do BANCO de dados que tem sua config separada também.

Saquei… está levando uns 15 segundos pra abrir mas só populei com dados da versão mais atual da EMOP… meu medo é que fique significativamente mais lento conforme o sistema for atualizando essas tabelas… por enquanto está rodando no meu notebook.

Ok… vou fazer desse jeito então. Vlw