SELECT DISTINCT COUNT VARIAS TABELAS
Boa noite estou desenvolvendo ums sistema de busca semelhante ao do mercado livre, preciso fazer o filtro da busca e contar qtos registros tem em cada filtro.
Ex: a pessoa busca Por Astra
No painel do filtro preciso listar quais categorias tem esse produto, quais estados, qual o tipo do produto se e novo ou usado. e na frente de cada item listado contar qtos registros tem em cada uma.
essa busca e feita em 3 tabelas diferentes.
Ja queimei a cuca e nao encontro uma solução se alguem puder da um help.
Ex: a pessoa busca Por Astra
No painel do filtro preciso listar quais categorias tem esse produto, quais estados, qual o tipo do produto se e novo ou usado. e na frente de cada item listado contar qtos registros tem em cada uma.
essa busca e feita em 3 tabelas diferentes.
Ja queimei a cuca e nao encontro uma solução se alguem puder da um help.
Tentei aqui nao funcionou, mas valeu a dica.
http://www.mercattu.com.br/busca_lista_resultado2.asp?txtBusca=a&tipoRequest=string&secao=tudo&order=relevAsc
Eu tenho esses 4 campos em comum em todas as tabelas, Estado, Cidade, Categoria, Tipo.
ai preciso listar nesse painel ai ao lado somente os dados que retornam da consulta, so que tb queria evitar uma nova query acredito que isso seja feito dentro do recordset
http://www.mercattu.com.br/busca_lista_resultado2.asp?txtBusca=a&tipoRequest=string&secao=tudo&order=relevAsc
Eu tenho esses 4 campos em comum em todas as tabelas, Estado, Cidade, Categoria, Tipo.
ai preciso listar nesse painel ai ao lado somente os dados que retornam da consulta, so que tb queria evitar uma nova query acredito que isso seja feito dentro do recordset
pra uma tabela so eu fiz assim
<br>Por Regiao<br>
<%
Set TmpLoc = conexao.execute([Ô]select Distinct(estado) from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô])
Do While not tmpLoc.eof
Set TmpLocc = conexao.execute([Ô]select Count(*) As total from tb_anunciosProd WHERE estado = [ô][Ô]& tmpLoc([Ô]estado[Ô]) &[Ô][ô] and tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô])
Do While not tmpLocc.eof
%>
<%=tmpLoc([Ô]estado[Ô])%>(<%=tmpLocc([Ô]total[Ô])%>)<br>
<% tmpLocc.MoveNext
loop
tmpLoc.MoveNext
loop
%>
<br>Por Regiao<br>
<%
Set TmpLoc = conexao.execute([Ô]select Distinct(estado) from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô])
Do While not tmpLoc.eof
Set TmpLocc = conexao.execute([Ô]select Count(*) As total from tb_anunciosProd WHERE estado = [ô][Ô]& tmpLoc([Ô]estado[Ô]) &[Ô][ô] and tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô])
Do While not tmpLocc.eof
%>
<%=tmpLoc([Ô]estado[Ô])%>(<%=tmpLocc([Ô]total[Ô])%>)<br>
<% tmpLocc.MoveNext
loop
tmpLoc.MoveNext
loop
%>
Poste todos campos da tabela [Ô]PRODUTO[Ô]
Tu vai ter que fazer várias queries. Fato.
Tu vai ter que fazer várias queries. Fato.
Fiz assim agora e listo legal
<%
Set rsFiltro= Server.CreateObject([Ô]ADODB.RECORDSET[Ô])
sqlFiltro = [Ô]select Distinct(estado) from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô] &_
[Ô]union [Ô] &_
[Ô]select Distinct(estado) from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô]
rsFiltro.CursorType = 3 [ô]adOpenStatic
Set rsFiltro.ActiveConnection = conexao
rsFiltro.Open sqlFiltro
Do While not rsFiltro.eof
response.write RsFiltro([Ô]estado[Ô]) & [Ô]<br>[Ô]
RsFiltro.MoveNext
loop
%>
Agora falta contar qtos registros tem cada rs
Alguma dica?
<%
Set rsFiltro= Server.CreateObject([Ô]ADODB.RECORDSET[Ô])
sqlFiltro = [Ô]select Distinct(estado) from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô] &_
[Ô]union [Ô] &_
[Ô]select Distinct(estado) from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô]
rsFiltro.CursorType = 3 [ô]adOpenStatic
Set rsFiltro.ActiveConnection = conexao
rsFiltro.Open sqlFiltro
Do While not rsFiltro.eof
response.write RsFiltro([Ô]estado[Ô]) & [Ô]<br>[Ô]
RsFiltro.MoveNext
loop
%>
Agora falta contar qtos registros tem cada rs
Alguma dica?
Depende do banco de dados..
Pseudocódigo
Pseudocódigo
Select Count(Distinct(Estados))
From Anuncios
Where Titulo = [Ô]PROCUREI[Ô]
funfo nao irmao, mas Obrigado assim msm.
com esse codigo ele me retorna estranho o resultado
<%
Set rsFiltroTipo= Server.CreateObject([Ô]ADODB.RECORDSET[Ô])
sqlFiltroTipo = [Ô]select Distinct(estadoProduto) As State from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô] &_
[Ô]union [Ô] &_
[Ô]select Distinct(estadoVeiculo) As State from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô]
rsFiltroTipo.CursorType = 3 [ô]adOpenStatic
Set rsFiltroTipo.ActiveConnection = conexao
rsFiltroTipo.Open sqlFiltroTipo
Do While not rsFiltroTipo.eof
set TipoCount = conexao.execute([Ô]select count(*) as Total from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô] and estadoProduto = [ô][Ô]& rsFiltroTipo([Ô]State[Ô]) &[Ô][ô][Ô] &_
[Ô]union [Ô] &_
[Ô]select count(*) as Total from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô] and estadoVeiculo = [ô][Ô]& rsFiltroTipo([Ô]State[Ô]) &[Ô][ô][Ô])
Do While not TipoCount.eof
response.write rsFiltroTipo([Ô]State[Ô]) & [Ô]([Ô] & TipoCount([Ô]Total[Ô]) & [Ô])[Ô] &[Ô]<br>[Ô]
TipoCount.MoveNext
loop
rsFiltroTipo.MoveNext
loop
set rsFiltroTipo = Nothing
%>
Retorna assim
Por Tipo
novo(7)
novo(25)
usado(0)
usado(2)
O Correto seria
Por Tipo
novo(25)
usado(2)
<%
Set rsFiltroTipo= Server.CreateObject([Ô]ADODB.RECORDSET[Ô])
sqlFiltroTipo = [Ô]select Distinct(estadoProduto) As State from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô] &_
[Ô]union [Ô] &_
[Ô]select Distinct(estadoVeiculo) As State from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô]
rsFiltroTipo.CursorType = 3 [ô]adOpenStatic
Set rsFiltroTipo.ActiveConnection = conexao
rsFiltroTipo.Open sqlFiltroTipo
Do While not rsFiltroTipo.eof
set TipoCount = conexao.execute([Ô]select count(*) as Total from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô] and estadoProduto = [ô][Ô]& rsFiltroTipo([Ô]State[Ô]) &[Ô][ô][Ô] &_
[Ô]union [Ô] &_
[Ô]select count(*) as Total from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô] and estadoVeiculo = [ô][Ô]& rsFiltroTipo([Ô]State[Ô]) &[Ô][ô][Ô])
Do While not TipoCount.eof
response.write rsFiltroTipo([Ô]State[Ô]) & [Ô]([Ô] & TipoCount([Ô]Total[Ô]) & [Ô])[Ô] &[Ô]<br>[Ô]
TipoCount.MoveNext
loop
rsFiltroTipo.MoveNext
loop
set rsFiltroTipo = Nothing
%>
Retorna assim
Por Tipo
novo(7)
novo(25)
usado(0)
usado(2)
O Correto seria
Por Tipo
novo(25)
usado(2)
usa um group by
<%
Set rsFiltroTipo= Server.CreateObject([Ô]ADODB.RECORDSET[Ô])
sqlFiltroTipo = [Ô]select Distinct(estadoProduto) As State from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô] &_
[Ô]union [Ô] &_
[Ô]select Distinct(estadoVeiculo) As State from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô]
rsFiltroTipo.CursorType = 3 [ô]adOpenStatic
Set rsFiltroTipo.ActiveConnection = conexao
rsFiltroTipo.Open sqlFiltroTipo
Do While not rsFiltroTipo.eof
set TipoCount = conexao.execute([Ô]select estadoProduto, count(*) as Total from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô] and estadoProduto = [ô][Ô]& rsFiltroTipo([Ô]State[Ô]) &[Ô][ô] GROUP BY estadoProduto [Ô] &_
[Ô]union [Ô] &_
[Ô]select estadoVeiculo, count(*) as Total from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô] and estadoVeiculo = [ô][Ô]& rsFiltroTipo([Ô]State[Ô]) &[Ô][ô] GROUP BY estadoVeiculo[Ô])
Do While not TipoCount.eof
response.write rsFiltroTipo([Ô]State[Ô]) & [Ô]([Ô] & TipoCount([Ô]Total[Ô]) & [Ô])[Ô] &[Ô]<br>[Ô]
TipoCount.MoveNext
loop
rsFiltroTipo.MoveNext
loop
set rsFiltroTipo = Nothing
%>
retorno assim
Por Tipo
novo(7)
novo(25)
usado(2)
Set rsFiltroTipo= Server.CreateObject([Ô]ADODB.RECORDSET[Ô])
sqlFiltroTipo = [Ô]select Distinct(estadoProduto) As State from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô] &_
[Ô]union [Ô] &_
[Ô]select Distinct(estadoVeiculo) As State from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô][Ô]
rsFiltroTipo.CursorType = 3 [ô]adOpenStatic
Set rsFiltroTipo.ActiveConnection = conexao
rsFiltroTipo.Open sqlFiltroTipo
Do While not rsFiltroTipo.eof
set TipoCount = conexao.execute([Ô]select estadoProduto, count(*) as Total from tb_anunciosProd WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô] and estadoProduto = [ô][Ô]& rsFiltroTipo([Ô]State[Ô]) &[Ô][ô] GROUP BY estadoProduto [Ô] &_
[Ô]union [Ô] &_
[Ô]select estadoVeiculo, count(*) as Total from tb_anuncios WHERE tituloAnuncio LIKE [ô]%[Ô]& txtBusca &[Ô]%[ô] and estadoVeiculo = [ô][Ô]& rsFiltroTipo([Ô]State[Ô]) &[Ô][ô] GROUP BY estadoVeiculo[Ô])
Do While not TipoCount.eof
response.write rsFiltroTipo([Ô]State[Ô]) & [Ô]([Ô] & TipoCount([Ô]Total[Ô]) & [Ô])[Ô] &[Ô]<br>[Ô]
TipoCount.MoveNext
loop
rsFiltroTipo.MoveNext
loop
set rsFiltroTipo = Nothing
%>
retorno assim
Por Tipo
novo(7)
novo(25)
usado(2)
Tópico encerrado , respostas não são mais permitidas