Ir para conteúdo

POWERED BY:

Arquivado

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

Cajau

[Resolvido] Ranking consultando várias tabelas

Recommended Posts

Olá, estou aqui com mais uma dúvida!! :)

 

Tenho um banco com algumas tabelas. Todas as tabelas possuem os mesmos campos, obviamente com informações diferentes.

Um desses campos é "quantidade" que exibe a quantidade de usuários.

 

Utilizando o UNION ALL eu consigo pesquisar em todas as tabelas ao mesmo tempo.

Só que, na hora de imprimir o resultado na página, eu quero que seja mostrado do maior para o menor, ou seja, que o campo "quantidade" de cada tabela que tiver o número maior seja o primeiro a ser impresso, e assim sucessivamente, até o de menor número.

 

É possível?

O que devo fazer?

 

Abraços!! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas isso que voce quer é que seja do maior para o menor em cada tabela ou de toda a união?

 

se for a segunda opção seria algo como

 

SELECT TB01.ID FROM TB01 UNION ALL SELECT TB02.ID FROM TB02 UNION ALL SELECT TB03.ID FROM TB03
ORDER BY ID DESC;

Compartilhar este post


Link para o post
Compartilhar em outros sites

... order by quantidade DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode classificar os resultados por todo o campo em uma ordem crescente ou decrescente apenas adicionando 'ORDER BY' no final de sua consulta. Você usaria ORDER BY field_name ASC para uma espécie de ascensão, ou , no seu caso como mencionado acima ORDER BY field_name DESCpara uma classificação decrescente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ASC ou DESC vem depois do nome do campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

corretissimo

 

SELECT * FROM Users
ORDER BY FirstName DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba... tava na minha cara o tempo todo :D

 

Pow, mais uma vez obrigadão!! Vocês são muito bons!!

 

Feliz dia das Crianças pra todos!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza...

feliz dia das crianças , tb, ahuaua

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que resolveu cajau

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenho um Sistema de Link Ranking , finalizando estarei disponibilizando no lab. de script, enquato isso se kiser adicionar o seu, é legal, tb

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenho um Sistema de Link Ranking , finalizando estarei disponibilizando no lab. de script, enquato isso se kiser adicionar o seu, é legal, tb

 

Pode deixar que eu coloco aqui sim.

Afinal, tenho que compartilhar com todos a ajuda que recebi daqui!

Só não sei se o tipo de trabalho que estou desenvolvendo interessa pra alguém, porque é um trabalho pessoal, e não profissional, propriamente dizendo.

 

Esse sistema de ranking é para mostrar as Redes de IRC cadastradas em meu sistema que possuem mais canais (salas de bate-papo).

Na verdade eu queria disponibilizar mesmo é a quantidade de usuários em cada Rede de IRC, mas algumas redes brasileiras escondem esse tipo de informação (o que eu acho uma bobagem).

Se escondem é porque têm medo de mostrar que são poucos rsss ;xx

 

De qualquer forma deem uma olhada na página principal do meu site como está até agora.

Ainda vou melhorar, e aplicar o ranking, mostrando do maior para o menor (quantidade de canais)

http://www.cajau.com

 

Assim que ficar pronto coloco aqui nessa página o código, ou na galeria de scripts prontos!

 

Abração pra todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putzgrila... resolvo uma coisa e complico outra...

 

Cada tabela tem campos como (id, canal, users, topico, data, hora... etc)

 

Então eu fiz um "SELECT COUNT(*) as canal" em cada tabela para somar quantos registros há no campo canal...

Beleza, funcionou nota 1000

 

Na hora de imprimir na tela uso algo como rs("canal") e tal...

tipo assim:

 

<%
While intrec < RS.PageSize and not RS.EOF
%>

  <tr>
    <td width="10%" bgcolor="#EEF3F8" height="10" align="center"><%=rs("canal")%></td>
    <td width="14%" align="left" bgcolor="#FAFBFC" height="10"><%=rs("rede")%></td>
    <td width="13%" align="center" bgcolor="#FAFBFC" height="10"><%=rs("lusers")%></td>
    <td width="2%" align="center" bgcolor="#FAFBFC" height="10">
    <img border="0" src="img/<%=rs("flag")%>.png" width="16" height="11"></td>
    <td width="30%" align="left" bgcolor="#EEF3F8" height="10"><%=rs("irc")%></td>
    <td width="30%" align="center" bgcolor="#FAFBFC" height="10"><%=rs("data")%> - <%=rs("hora")%></td>
   </tr>
<%
   RS.MoveNext
   intrec=intrec+1
Wend
%>

 

Imprime somente o rs("canal") do maior para o menor, e os outros não

Como faço pra exibir os outros campos da tabela, além do campo "canal", obedecendo a ordem do ranking?

 

Abaixo está a consulta, como é feita!

 

<%
Set rs = Server.CreateObject("ADODB.Recordset")

  consulta = " SELECT COUNT(*) as canal " & _
   " FROM 1 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 2 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 3 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 4 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 5 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 6 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 7 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 8 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 9 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 10 " & _

   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 11 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 12 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 13 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 14 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 15 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 16 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 17 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 18 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 19 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 20 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 21 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 22 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 23 " & _
   
   " UNION ALL " & _

   " SELECT COUNT(*) as canal " & _
   " FROM 24 " & _
   " ORDER BY canal DESC "
   
   rs.Open consulta, conn_redes, 1, 3
%>

Já tentei fazer

" SELECT *, COUNT(*) as canal "
mas dá erro

Tenho que criar outro SELECT para os demais campos?

Mas, e como fazer a consulta seguir a ordem do ranking??

Eu tava indo taum bem Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

quantos campos que recuperar?

 

Se for só um campo seria assim

 

SELECT CAMPO, COUNT(*) AS TOTAL FROM TABELA GROUP BY CAMPO ORDER BY COUNT(*) DESC

Isso seria como se selecionasse com DISTINCT só que contando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quero recuperar praticamente todos os outros campos... rede, lusers, flag, irc, data, hora...

Compartilhar este post


Link para o post
Compartilhar em outros sites

quantos campos que recuperar?

 

Se for só um campo seria assim

 

SELECT CAMPO, COUNT(*) AS TOTAL FROM TABELA GROUP BY CAMPO ORDER BY COUNT(*) DESC

Isso seria como se selecionasse com DISTINCT só que contando

 

 

Segui seu exemplo, fiz vários testes... mas sempre dá o famigerado erro 500...

No caso, fiz pra resgatar 2 campos apenas: rede e canal, sendo que fazendo Ranking em canal.

Se desse certo eu tentaria resgatar os demais campos... mas num deu não.

 

<%
Set rs = Server.CreateObject("ADODB.Recordset")
 
  consulta = " SELECT rede, COUNT(*) as canal " & _
   " FROM 1 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 2 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 3 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 4 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 5 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 6 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 7 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 8 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 9 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 10 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _

   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 11 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 12 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 13 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 14 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 15 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 16 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 17 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 18 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 19 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 20 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 21 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 22 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 23 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC " & _
   
   " UNION ALL " & _
 
   " SELECT rede, COUNT(*) as canal " & _
   " FROM 24 " & _
   " GROUP BY rede " & _
   " ORDER BY COUNT(*) DESC "
   
   rs.Open consulta, conn_redes, 3, 3
%>

To quase desistindo...

Já esgotei minhas buscas pelo Google tb :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça funcionar para uma tabela e depois una

 

qual o erro exatamente que ta dando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já consegui resolver...

Fui mexendo e mexendo.. fiz umas gambiarras e funcionou!

virei a noite nisso rsss

To ajustando umas coisinhas agora, e depois posto o código aqui pra vcs verem

 

Tah uma gambiarra danada, mas tah funcional e rápido.

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

só nos POG (programaçaun Orientada a Gambiarra)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, está aí meu Monitor de Redes de IRC, que consegui fazer graças à ajuda e paciência que todos tiveram com minhas dúvidas!! :D

Dei uma enxugada nos códigos pra não ficar muito grande pra postar aqui!

Meu BD possui 35 tabelas, numeradas de 1 a 35, mas para diminuir o código, como falei, deixei apenas 3 tabelas nesse exemplo.

 

<!--#include file="conn_redes.asp"-->
<%
 RDE1 = "SELECT COUNT(*) as canal FROM 1"
 Set canais1 = conn_redes.execute(RDE1)

 RDE2 = "SELECT COUNT(*) as canal FROM 2"
 Set canais2 = conn_redes.execute(RDE2)

 RDE3 = "SELECT COUNT(*) as canal FROM 3"
 Set canais3 = conn_redes.execute(RDE3)

totalchan = canais1("canal") + canais2("canal") + canais3("canal")
%>

<%
 Set rede = Server.CreateObject("ADODB.Recordset")
 
 redes = " SELECT TOP 1 * " & _
  " FROM 1 " & _
  " ORDER BY ID DESC " & _

  " UNION ALL " & _
 
  " SELECT TOP 1 * " & _
  " FROM 2 " & _
  " ORDER BY ID DESC " & _
  
  " UNION ALL " & _
  
  " SELECT TOP 1 * " & _
  " FROM 3 " & _
  " ORDER BY lusers DESC "
  
  rede.Open redes, conn_redes, 3, 3
%>
<head>
<meta http-equiv="Content-Language" content="pt-br">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<link href="css/css.css" rel="stylesheet" type="text/css">
<link href="monitor.css" rel="stylesheet" type="text/css" />
<base target="_parent">
</head>
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">
<div align="center">
<table border="0" width="100%" id="table8" cellspacing="0" cellpadding="0">
<tr><td><div align="center">
<table border="0" width="100%" cellspacing="0" cellpadding="3"><tr>
<td width="10%" align="center" bgcolor="#69A4BA" height="20"><p><font color="#FFFFFF"><b>canais</b></font></td>
<td width="21%" bgcolor="#69A4BA" height="20" align="center"><p align="left"><font color="#FFFFFF"><b>rede</b></font></td>
<td width="13%" bgcolor="#69A4BA" height="20" align="center"><p><font color="#FFFFFF"><b>usuários</b></font></td>
<td width="25%" bgcolor="#69A4BA" height="20" align="center" colspan="2"><p align="left"><font color="#FFFFFF"><b>servidor</b></font></td>
<td width="30%" bgcolor="#69A4BA" height="20" align="center"><font color="#FFFFFF"><b>lista atualizada em:</b></font></td>
</tr>

<%
i = 1

While not rede.EOF

 qtd = rede("lusers")
 network = rede("rede")
 
 if network = "Virtualife" Then
  bd = "1"
 elseif network = "Hub4Ever" Then
  bd = "2"
 elseif network = "Rizon" Then
  bd = "3"
 end if

 Set rs = Server.CreateObject("ADODB.Recordset")
 consulta = " SELECT COUNT(*) as canal " & _
  " FROM "&bd&" "
 rs.Open consulta, conn_redes, 3, 3

 if i = "1" then 
  cor1 = "#EEF3F8"
  cor2 = "#FAFBFC"
 else
  cor1 = "#E4EBF2"
  cor2 = "#F1F4F7"
 end if 

%>
<tr>
 <td width="10%" bgcolor="<%=cor1%>" height="22" align="center"><%=rs("canal")%></td>
 <td width="14%" align="left" bgcolor="<%=cor2%>" height="22"><a href="buscanal.asp?no=<%=bd%>"><%=rede("rede")%></a></td>
 <td width="13%" align="center" bgcolor="<%=cor1%>" height="22"><%if qtd = "0" then%>n/d<%else%> <%=rede("lusers")%><%end if%></td>
 <td width="2%" align="center" bgcolor="<%=cor2%>" height="22"><img border="0" src="img/<%=rede("flag")%>.png" width="16" height="11"></td>
 <td width="30%" align="left" bgcolor="<%=cor2%>" height="22"><%=rede("irc")%></td>
 <td width="30%" align="center" bgcolor="<%=cor1%>" height="22"><%=rede("data")%> - <%=rede("hora")%></td>
</tr>
<%
 rede.MoveNext
 if i = "1" then
  i = "2"
 else
  i = "1"
 end if
Wend
%>

</table></div></td></tr></table></div>
<div align="center"><table border="0" width="99%" cellspacing="0" cellpadding="3">
<tr><td><p align="center"> </td></tr>
<tr><td><p align="center">temos um total de<font color="#0066CC"> <%=totalchan%></font> canais em nosso banco de dados</td>
</tr></table></div>

<%
canais1.close
set canais1 = nothing
canais2.close
set canais2 = nothing
canais3.close
set canais3 = nothing

rs.close
set rs = nothing

rede.close
set rede = nothing

conn_redes.close
set conn_redes = nothing

%>

O Monitor apresenta as Redes de IRC cadastradas, nacionais e internacionais, por ordem de quantidade de usuários (ranking) e também mostra a quantidade de canais em cada rede.

Eu fiz um sistema de conexão em socket (FSockOpen + PHP) para capturar todas as informações e gravar no BD.

Gambiarra purinha né... Mas tah funcionando :D

 

Brigadão, galera!!!

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.