Como fazer busca facetada

6 respostas
R

Galera, alguem tem algum exemplo ou artigo que eu possa ler com exemplos de codigo e etc de busca facetada, o q eu quero fazer é mostrar uma area de filtros no meu site onde ele mostre tambem o numero de informações encontradas sobre aquele tema, por exemplo: laranja(12), banana(11)… tipo aqueles filtros do mercado livre e etc, sé que nao tenho ideia nem de como fazer a query disso, se alguem tiver como me ajudar agradeço, obrigado

6 Respostas

N
Você pode buscar todos as informações em questão. Se elas possuem um tema, você deve fazer groupby sobre os temas existentes e um count sobre o número de informações. Algo como:
SELECT
TEMA.NOME TEMA, COUNT(INFO.ID) ENCONTRADOS

FROM
INFORMACOES INFO
INNER JOIN TEMAS TEMA ON INFO.TEMA = TEMA.ID

GROUP BY
TEMA.NOME

ORDER BY
TEMA.NOME
Espero ter ajudado, fique com Deus! :D
R

muito obrigado, foi de grande ajuda, só uma duvida, digamos q na minha tabela eu tenha uma coluna de cidade e outra de estado, nao daria pra eu fazer o count numa mesma consulta né? eu teria q fazer um select pra cada coluna e agrupar de acordo com os dados repetidos de cada coluna pra obter os valores e montar o filtro, correto?

N
renatomattos2912:
muito obrigado, foi de grande ajuda, só uma duvida, digamos q na minha tabela eu tenha uma coluna de cidade e outra de estado, nao daria pra eu fazer o count numa mesma consulta né? eu teria q fazer um select pra cada coluna e agrupar de acordo com os dados repetidos de cada coluna pra obter os valores e montar o filtro, correto?
Não. Segue o mesmo esquema ali em cima. Com a cláusula groupby, você agrupa o que é igual na consulta para trazer resultados de operações sum(), min(), max(), avg()... Neste caso de cidades e estados, ficaria igual ao exemplo acima.
SELECT
ESTADO.NOME ESTADO, COUNT(CIDADE.ID) NUMERODECIDADES

FROM
CIDADE
INNER JOIN ESTADO ON CIDADE.ESTADO = ESTADO.ID

GROUP BY
ESTADO.NOME

ORDER BY
ESTADO.NOME
R

então mas nao é bem este os caso, o q eu quis dizer é que eu preciso trazer o count de cidades e de estados, um nao depende do outro, pq no meu site tera uma area de filtro listando os bairros e outra area de filtros listando as cidades, por exemplo, o cara faz a busca pelo nome de um bairro, digamos que existam varios bairros com nome parecido e esses bairros podem estar em varias cidades, eu exibiria algo assim (bairros: bairro1(2), bairro2(10)… ) e abaixo disso eu exibiria (cidades: cidade1(5), cidade2(19)…).
A ideia que citei da pra resolver fazendo dois selects deste que vc me ensinou para cada situação, um pra bairro e outro pra cidade, minha duvida é se daria pra resolver isso usando um select só.

N
renatomattos2912:
então mas nao é bem este os caso, o q eu quis dizer é que eu preciso trazer o count de cidades e de estados, um nao depende do outro, pq no meu site tera uma area de filtro listando os bairros e outra area de filtros listando as cidades, por exemplo, o cara faz a busca pelo nome de um bairro, digamos que existam varios bairros com nome parecido e esses bairros podem estar em varias cidades, eu exibiria algo assim (bairros: bairro1(2), bairro2(10)... ) e abaixo disso eu exibiria (cidades: cidade1(5), cidade2(19)...). A ideia que citei da pra resolver fazendo dois selects deste que vc me ensinou para cada situação, um pra bairro e outro pra cidade, minha duvida é se daria pra resolver isso usando um select só.
Entendi agora sua dúvida. Você poderia fazer uso de subconsultas, que tal? Algo como:
SELECT
BAIRRO.NOME BAIRRO, X.NUMERODEESTADOS, COUNT(X.CIDADE) NUMERODECIDADES 

FROM
BAIRRO
INNER JOIN CIDADE ON BAIRRO.CIDADE = CIDADE.ID
INNER JOIN ESTADO ON CIDADE.ESTADO = ESTADO.ID
INNER JOIN (
SELECT 
CIDADE.ID CIDADEID, CIDADE.NOME CIDADE, ESTADO.ID ESTADOID, COUNT(ESTADO.ID) NUMERODEESTADOS

FROM
ESTADO

GROUP BY
CIDADE.ID, CIDADE.NOME, ESTADO.ID
) X ON ESTADO.ID = X.ESTADOID

GROUP BY
BAIRRO.NOME, X.NUMERODEESTADOS
Uma consulta se torna uma tabela temporária, onde você liga com as tabelas físicas. Fiz no olho só, não sei se tá correto, mas o caminho poderia ser esse. Que tal?
R

isso, muito obrigado, vou dar uma testada, vlw pela ajuda.

Criado 19 de fevereiro de 2013
Ultima resposta 19 de fev. de 2013
Respostas 6
Participantes 2