Autor Tópico: [RESOLVIDO] - Dúvida sobre alterar o Quick Search  (Lida 685 vezes)

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 122
    • Email
[RESOLVIDO] - Dúvida sobre alterar o Quick Search
« Online: Julho 15, 2016, 10:39:32 am »
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??
« Última modificação: Julho 15, 2016, 03:01:50 pm por Ronyan Alves »

Jailton

  • Expert
  • *****
  • Mensagens: 2034
Re:Dúvida sobre alterar o Quick Search
« Responder #1 Online: Julho 15, 2016, 10:56:42 am »
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:

Código: [Selecionar]
<?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.
« Última modificação: Julho 15, 2016, 11:57:55 am por Jailton »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 122
    • Email
Re:Dúvida sobre alterar o Quick Search
« Responder #2 Online: Julho 15, 2016, 12:30:31 pm »
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