Ir para conteúdo

POWERED BY:

Arquivado

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

David Borges

Busca com Filtros + ASP + MYSQL

Recommended Posts

Pessoal, a dúvida é simples mas não estou conseguindo resolver.

 

Preciso pegar o resultado de um consulta em um banco mysql e exibir possíveis novos filtros para essa consulta.

 

Exemplo

 

Consulta no banco retornando todos os alunos do colégio.

 

- Filtrar por

 

Classe

-- 1º Colegial

-- 2º Colegial

-- 3º Colegial

 

Idade

-- 16 Anos

-- 17 Anos

-- 18 Anos

 

Ao clicar em uma das opções acima, iremos filtrar os alunos do colégio através do filtro escolhido.

 

Até aí tudo certo, mas preciso exibir o contador de resultados em cada filtro antes do mesmo ser selecionado, por exemplo:

 

Classe

-- 1º Colegial (16 registros)

-- 2º Colegial (23 registros)

-- 3º Colegial (36 registros)

 

Idade

-- 16 Anos (6 registros)

-- 17 Anos (46 registros)

-- 18 Anos (2 registros)

Qual seria a melhor forma de fazer isso? A forma que menos consumiria recursos e requisições no servidor?

 

Vlw galera!

Compartilhar este post


Link para o post
Compartilhar em outros sites

FAVOR NÃO RESPONDER NESTE TÓPICO

 

pois já existe outro com o conteúdo é idêntico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu recebi 2 e-mails de resposta deste tópico vindos de você xanburzum. Em um deles você coloca o seguinte:

 

"tem um modelo que postei, onde vc por optar por fazer uma busca pela palavra exata, pela frase ou outras opções no seu caso seria apenas implementar seus filtros."

 

Sua resposta anterior e que foi deletada pode ser vista no http://forum.imasters.com.br/topic/503026-busca-com-filtros-asp-mysql/#entry1990329

 

Sua interpretação da minha pergunta está errada, eu já encontrei os outros tópicos falando sobre a busca por palavra, frase ou parte de conteúdo usando o like, inclusive este seu post.

 

Meu problema não é implementar o filtro, o mesmo até já está implementado. Já faço um select com as possibilidades vindas do Banco.

 

O que preciso fazer é colocar o contador de resultados na frente de cada filtro.

 

O problema é que tenho cerca de 30 filtros, não faz sentido fazer um select em cada filtro exibido para coletar a quantidade de registros que ele afetaria.

 

Meu filtro hoje:

 

Classe

-- 1º Colegial

-- 2º Colegial

-- 3º Colegial

 

Idade

-- 16 Anos

-- 17 Anos

-- 18 Anos

 

Preciso acrescentar o contador conforme abaixo, mas tomando muito cuidado com a performance da aplicação. Não gostaria de a cada filtro exibido ter que fazer um select no banco para exibir a quantidade.

 

Classe

-- 1º Colegial (16 registros)

-- 2º Colegial (23 registros)

-- 3º Colegial (36 registros)

 

Idade

-- 16 Anos (6 registros)

-- 17 Anos (46 registros)

-- 18 Anos (2 registros)

 

Além dessa possibilidade do select em cada filtro, gostaria de saber se há alguma outra alternativa para essa questão.

 

Um exemplo do que preciso, porém em outro segmento, é o http://www.compreauto.com.br/buscar/tipo.carros-caminhonetes/marca.chevrolet/

 

Na coluna esquerda há um "REFINAR BUSCA". Preciso simplesmente entender a lógica dessa funcionalidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

use o recordcount para cada registro

Compartilhar este post


Link para o post
Compartilhar em outros sites
Opa xanburzum, obrigado pela ajuda.


Usando o recordcount eu teria que fazer um novo select para cada filtro, correto?


O problema é que no meu caso, terei muitos filtros. Acho que a performance dessa solução não seria muito bacana.


Vou tentar exemplificar uma situação:


Minha base de alunos tem alunos com 10, 11, 12, 13, 14 e 15 anos, com o sexo masculino e feminino.


Quando eu faço a busca inicial, listando todos os alunos, preciso criar filtros para que a o usuário escolha se selecione a idade dos alunos que está pesquisando.


Por exemplo:


Listagem Geral de Alunos

1450 resultados


Filtre por Sexo

- Masculino (785 resultados)

- Feminino (665 resultados)


Filtre por Idade

- 10 anos (50 resultados)

- 11 anos (155 resultados)

- 12 anos (350 resultados)

- 13 anos (90 resultados)

- 14 anos (390 resultados)

- 15 anos (880 resultados)


Repare que neste caso, são 9 filtros, mas como essa idade depende da minha base de alunos, ela poderá ser maior ainda.


Ao clicar, vou listar todos os alunos aplicando o filtro selecionado.


O meu problema está em criar esse filtro rsrs...


Já pesquisei no google sobre "refinar busca", mas não acho uma alternativa.


Obrigado novamente pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dependendo da situacaun melhor usar um contador normal ou a clausula count do SQL, pois se o seu bd for muito grande o recordcount do objeto recordset para apresentar queda de desempenho
e para usar o RecordCount , seu cursortype tem k ser recordset.CursorType = 3 (AdOpenDynamic)

exemplo:

<%
DIM mySQL, objRS
mySQL = "SELECT * FROM myTable"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open mySQL, objConn

' Count how many records exist
DIM iRecordCount
iRecordCount = 0
DO WHILE NOT objRS.EOF
iRecordCount = iRecordCount + 1
objRS.MoveNext
Loop

' Display result
Response.Write "(" & iRecordCount & ")"

objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>


SQL COUNT

<!--#INCLUDE VIRTUAL="/includes/connection.asp" -->

<%
DIM mySQL, objRS
mySQL = "SELECT Count(*) AS intTotal FROM myTable"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open recSQL, objConn

' Display result
Response.Write objRS("intTotal")

objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá David,

 

Bom, se entendi bem (me corrija se estiver errado), quando vc faz o select, aparece 1450 registro, e dentro desses, vc tem as possibilidades (masculino, femino, etc)...

 

Listagem Geral de Alunos
1450 resultados
 
Filtre por Sexo
- Masculino (785 resultados)
- Feminino (665 resultados)
 
Filtre por Idade
- 10 anos (50 resultados)
- 11 anos (155 resultados)
- 12 anos (350 resultados)
- 13 anos (90 resultados)
- 14 anos (390 resultados)
- 15 anos (880 resultados)

Talvez o possível de imediato (mas talvez a longo prazo não seja o ideal criar vários contadores que vão sendo incrementados dentro do loop, usando o CASE...WHEN, veja alguns links sobre o tema:

 

- http://dba.stackexchange.com/questions/23068/how-to-make-multiple-counts-in-one-query

- http://stackoverflow.com/questions/8600671/mysql-select-statement-with-case-or-if-elseif-not-sure-how-to-get-the-result

- http://imasters.com.br/artigo/18681/mysql/utilizando-select-case-com-mysql/

- http://stackoverflow.com/questions/6878090/mysql-sum-with-case-statement

 

Espero ter ajudado...

 

sds

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ronaldo, obrigado pelas fontes, já conhecia o CASE mas dei uma nova olhada nos links enviados para ver se achava alguma coisa.

 

Agora estou preocupado, como você mesmo comentou, com relação à performance, principalmente considerando que teremos filtros mais complexos. Em uma reunião hoje solicitaram a inclusão das variáveis de Notas dos alunos no sistema.

 

Enfim, se entrar todas as variáveis dos alunos, vou chegar na quantidade de filtros utilizadas pelo Bondfaro rsrsrs...

 

http://www.bondfaro.com.br/celular-e-smartphone/mp3-player.html

 

Eles usam exatamente o que preciso.

 

Mas fico pensando, será que realmente eles fazem o loop dentro de cada variação? Será que não existe alguma forma mais simples de pegar esses contadores na frente de cada filtro?

 

Já pesquisei em PHP, ASP e em tudo que é lugar, mas não vejo nenhum exemplo implementado do que preciso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um filtro dinâmico, o user vai escolhendo e vai criando as sql conforme as seleções anteriores

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que o xanburzum disse faz muito sentido, no entanto, eu estou pensando aqui (eu não conheço a fundo MySql) sobre a utilização de subqueries, em quantos filtros, no máximo, vc iria necessitar em cada consulta, etc... se não poderia haver outras consultas dependentes, etc...

 

talvez usar um filtro com jquery (http://jiren.github.io/filter.js/filterjs.html), onde vc teria todos os dados em apenas uma leitura e poderia filtrá-los via json, seria exatamente o que vc precisa...

 

Veja o link e creio que vai te ajudar muito... as especificidades depois vc vai tratando...

 

Poste aqui suas impressões sobre o link que passei, se serve ou não, se já resolve algo, etc...

 

bom trabalho...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz, se eu contar vcs não vão acreditar. rsrsrs

 

O próprio asp tem uma função que ajuda muito nessa hora... o ADO Filter

 

http://www.w3schools.com/ado/prop_rs_filter.asp

 

Basicamente ele pega o resultado da consulta e cria sub-filtros para exibir a quantidade de resultados.

 

    Call abre_conexao(cnx)
    sql = "SELECT * from tb_conteudo"			
    set rs = cnx.execute(sql)
	
	'APLICANDO UM FILTRO PARA TODOS OS ITENS QUE SÃO IGUAIS À "JOÃO"
	rs.Filter = "titulo_tb_conteudo = 'JOÃO'"
	response.Write(rs.RecordCount)
	
	
	response.Write("</br>")
	
	'REMOVENDO O FILTRO DO NOME JOÃO PARA PODER APLICAR UM NOVO FILTRO
	rs.Filter = 0

	'APLICANDO UM NOVO FILTRO
	rs.Filter = "titulo_tb_conteudo LIKE '%DA SILVA%'"
	response.Write(rs.RecordCount)
	
    call fecha_conexao()

 

 

MUIIITO MAIS SIMPLES DO QUE ESTÁVAMOS IMAGINANDO... rsrs...

 

Agora to pensando em fazer o seguinte:

 

- Fazer o select geral, trazendo todos os alunos

- Com o resultado montado, vou deixar a rs aberta e aproveita-la em um segundo loop com as possibilidades e exibindo os valores dos filtros.

 

Acho que vai dar certo... qlqer coisa posto aqui novamente. rsrsr

 

E obrigado galera... foi graças à ajuda de vocês que criei coragem para encontrar a solução.

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.