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
Como fazer busca facetada
6 Respostas
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
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?
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
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ó.
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
isso, muito obrigado, vou dar uma testada, vlw pela ajuda.