Alguém sabe como fazer um varredura no banco de dados inteiro somente com um pesquisa?
por exemplo fazer um select * from todas as tables where todas as columns like ‘%minha pesquisa%’;
tudo de uma vez?
Alguém sabe como fazer um varredura no banco de dados inteiro somente com um pesquisa?
por exemplo fazer um select * from todas as tables where todas as columns like ‘%minha pesquisa%’;
tudo de uma vez?
Não existe solução nativa.
O mais próximo disso (que é uma baita gambiarra) é identificar todas as tabelas (como um show tables) e fazer um select com produto cartesiano ou fazer joins malucos ou iterar sobre cada tabela e realizar a pesquisa.
Pergunta: para que isso?
Além de que fazer uma busca em todo o banco pode resultar em um belo congelamento de toda a aplicação.
Preguiça de especificar os campos? Caso contrário, usa full text search:
estou tentando fazer um busca dinamica no meu sistema, o usuario nao precisa por exemplo ir ate o formulario de produtos para pesquisar um produto, assim para qualquer outra pesquisa
Cara, não confunda, dinâmico com suicida.
O melhor a se fazer é utilizar algum conceito de big data, ou mesmo, implementar algo como palavras chave. Não faz sentido esperar que o usuário digite Teodosia e esperar que o sistema encontre todas as relações de tal palavra como produto ou cliente ou fornecedor ou matéria prima ou o que quer que seja.
Mesmo com sua modelagem inadequada, o que está te impedindo de fazer essas pesquisas?
não estou conseguindo juntar tipo:
select * from todas as tables where todas as columns like ‘%minha pesquisa%’;
algo assim com um comando so.
não queria fazer separado, primeiro um comando depois outro
select
campo_descricao as descricao, etc..
from
tabela1
where
campo1 like '%condicao%'
or campo2 like '%condicao%'
or etc...;
union all
select
campo_descricao_tabela2 as descricao, etc..
from
tabela2
where
campo1 like '%condicao%'
or campo2 like '%condicao%'
or etc...;
union all
select ...
O ideal seria usar full text search como indiquei no post anterior.
Acho a sua idéia boa (uma busca geral em todo o sistema) mas essa forma de implementar me parece problemática.
Recomendo ter uma tabela específica de busca, onde tenha uma coluna com os termos pesquisáveis e outra coluna com o link para o registro/tela original. Daí essa tabela pode ser propriamente indexada e usar capacidades como fulltext index search, como sugerido acima.
Para popular essa tabela, você pode criar uma rotina pós-atualizaçao em cada tabela que deseja tornar pesquisável.
Se sua base de dados for realmente grande (dezenas de milhoes de registros) talvez valha a pena pensar numa ferramenta específica para busca, como Elastic Search por exemplo.