Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

KamiK4Z3

Busca em mais de uma tabela

Recommended Posts

Estou fazendo um sistema de busca interna no meu site e esse sistema consulta em 5 tabelas diferentes.

Antes eu tinha feito 5 SELECTs diferentes, mas preciso dividir o resultado por páginas e tal, por isso preciso de uma query só!

 

Abaixo tem o que eu fiz ateh agora usando UNION, mas naum consegui resultado...ele dah erro na sintaxe, soh q segui a msm forma passada no manual do MySQL

 

SELECT * FROM hotelaria WHERE hotelaria.hot_nome LIKE '%%$busca%%' OR hotelaria.hot_desc LIKE '%%$busca%%' OR hotelaria.hot_end LIKE '%%
$busca%%' OR hotelaria.hot_tel LIKE '%%$busca%%' OR hotelaria.hot_segm LIKE '%%$busca%%' OR hotelaria.hot_link LIKE '%%$busca%%' OR 
hotelaria.hot_meta LIKE '%%$busca%%' 
UNION ALL 
SELECT * FROM gastronomia WHERE gastronomia.gas_nome LIKE '%%$busca%%' OR gastronomia.gas_desc LIKE '%%$busca%%' OR gastronomia.gas_end 
LIKE '%%$busca%%' OR gastronomia.gas_tel LIKE '%%$busca%%' OR gastronomia.gas_link LIKE '%%$busca%%' OR gastronomia.gas_meta LIKE '%%$busca%%' 
UNION ALL 
SELECT * FROM noticias WHERE not_titulo LIKE '%%$busca%%' OR not_chamada LIKE '%%$busca%%' OR not_conteudo LIKE '%%$busca%%' OR not_data 
LIKE '%%$busca%%' 
UNION ALL 
SELECT * FROM conteudo WHERE conteudo.cont_nome LIKE '%%$busca%%' OR conteudo.cont_desc LIKE '%%$busca%%' OR conteudo.cont_cham LIKE '%%
$busca%%' OR conteudo.cont_link LIKE '%%$busca%%' OR conteudo.cont_seg LIKE '%%$busca%%' 
UNION ALL 
SELECT * FROM servicos WHERE servicos.serv_nome LIKE '%%$busca%%' OR servicos.serv_cat LIKE '%%$busca%%' OR servicos.serv_end LIKE '%%$busca%%' OR servicos.serv_tel LIKE '%%$busca%%' OR servicos.serv_link LIKE '%%$busca%%' OR servicos.serv_meta LIKE '%%$busca%%'

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, o UNION tem coisas não muito triviais que, se não for feito com atenção, dá pau mesmo, ainda mais quando vocêê utiliza SELECT * que é perigoso por vários motivos e não aconselho o uso, a menos que sua aplicação for usar todas as colunas retornadas...mesmo assim, se um novo campo for adicionado, sua aplicação poderá parar de funcionar normalmente.

 

Bom. . .UNION pode ser usando se suas tabelas tiverem a mesma quantidade de campos e estes na mesma sequencia, terem os mesmo tipos de dados...o que acho de remota possibilidade, exemplo:

 

Tabela A:

 

CREATE TABLE A (id int, nome char(60));

 

Tabela B:

 

CREATE TABLE B (id int, email char(100));

 

Podemos nesse caso fazer um UNION com SELECT *, mesmo que nome e email apareçam na mesma coluna e vira uma bagunça, mas o contexto é, os tipos de dados e a quantidade de colunas é a mesma.

 

SELECT * FROM A
UNION
SELECT * FROM B;

 

Tente alinhar isso na sua SELECT e volte a postar caso tenha dúvidas!! Abração!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, o UNION tem coisas não muito triviais que, se não for feito com atenção, dá pau mesmo, ainda mais quando vocêê utiliza SELECT * que é perigoso por vários motivos e não aconselho o uso, a menos que sua aplicação for usar todas as colunas retornadas...mesmo assim, se um novo campo for adicionado, sua aplicação poderá parar de funcionar normalmente.

 

Bom. . .UNION pode ser usando se suas tabelas tiverem a mesma quantidade de campos e estes na mesma sequencia, terem os mesmo tipos de dados...o que acho de remota possibilidade, exemplo:

 

Tabela A:

 

CREATE TABLE A (id int, nome char(60));

 

Tabela B:

 

CREATE TABLE B (id int, email char(100));

 

Podemos nesse caso fazer um UNION com SELECT *, mesmo que nome e email apareçam na mesma coluna e vira uma bagunça, mas o contexto é, os tipos de dados e a quantidade de colunas é a mesma.

 

SELECT * FROM A
UNION
SELECT * FROM B;

 

Tente alinhar isso na sua SELECT e volte a postar caso tenha dúvidas!! Abração!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Entendi....

como eu poderia fazer essa minha busca? INNER JOIN será q resolve?

 

Tô quebrando a cabeça desde ontem e não consigo resolver!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essas tabelas estão relacionadas, ou seja, existem campos PK e FK ligando as mesmas?

 

...

 

Então kra...

 

elas não tem nenhum vinculo...tanto eh q cada tabela tem um quantidade X de colunas...tah ai a explicação do UNION naum ter funcionado!

Cada uma faz parte de um segmento do site!

 

Eu tinha feito 5 SELECTs diferentes, um pra cada query, soh q preciso fazer a paginação dos resultados e com 5 querys diferentes a paginação fika mais complicada ainda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

é, já que você está trabalhando na implementação de um sistema de busca, diante dessa modelagem não haverá outra forma possível do que fazer os SELECTs separados para cada categoria de busca, por exemplo:

 

Hotelaria(5 resultados):

 

resultado 1

resultado 2

resultado 3

resultado 4

resultado 5

 

Serviços(2 resultados):

 

resultado 1

resultado 2

 

entendeu??

 

Abração camarada!! http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

é, já que você está trabalhando na implementação de um sistema de busca, diante dessa modelagem não haverá outra forma possível do que fazer os SELECTs separados para cada categoria de busca, por exemplo:

 

Hotelaria(5 resultados):

 

resultado 1

resultado 2

resultado 3

resultado 4

resultado 5

 

Serviços(2 resultados):

 

resultado 1

resultado 2

 

entendeu??

 

Abração camarada!! http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif

 

Entendi....acho q estou conseguindo aki!!!

toma q dê certo!!

 

abraço!!!

 

brigadão velho!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.