Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida Sql, Contando Registos Múltiplos


nunoribeiro

Pergunta

viva,

gostaria que me esclrecessem sobre como fazer este sql. tenho uma bd access com varias tabelas. uma delas é utilizadores. o que quero fazer é contar quantas vezes um determinado utilizador (tipo SELECT count(id)) aparece em 5 outras tabelas (através do seu id)

eu consigo fazer assim:

SELECT count(id) as totTabela1 FROM tabela1 WHERE id=100

SELECT count(id) as totTabela2 FROM tabela2 WHERE id=100

SELECT count(id) as totTabela3 FROM tabela3 WHERE id=100

SELECT count(id) as totTabela4 FROM tabela4 WHERE id=100

SELECT count(id) as totTabela5 FROM tabela5 WHERE id=100

somando os totTabelas obtenho o total de vezes que o utilizador aparece. o problema é que as tabelas são grandes e demora bastante a efectuar isto.

mas não será melhor ficar num SQL apenas ? ficaria com certeza mais rápido, há solucao ?

obrigado.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

deixa eu ver se entendi.

voce cria 5 RecordSet, cada um com um select e depois soma os valores dos 5 campos é isso?

Eu fiz uma vez usando union só que ele gera um registro para cada select depois voce tem que criar um looping e somar os valor dos cinco registros, ficaria assim:

SELECT count(id) as totTabela FROM tabela1 WHERE id=100 union SELECT count(id) as totTabela FROM tabela2 WHERE id=100 union SELECT count(id) as totTabela FROM tabela3 WHERE id=100 union SELECT count(id) as totTabela FROM tabela4 WHERE id=100 union SELECT count(id) as totTabela FROM tabela5 WHERE id=100 

serão criados 5 registros, cada um com o total de uma tabela.

Crie um looping e some os valores

Sinceramente, não sei se vai haver ganho de performance.

Mais não custa tentar

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz um teste aki e funcionou assim:

<%
set conexao=server.createobject("adodb.connection")
cnpath="DBQ=" & server.mappath("vendas.mdb")
conexao.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath
SQL="select count(v1.data) as totvendas from vendas v1 where v1.nome='cyberalexxx' union select count(v2.data) as totvendas from vendas2 v2 where v2.nome='cyberalexxx'"
set rs = conexao.execute(sql)

x=0
do while not Rs.Eof
  x = x + 1
  response.write "Total da Tabela " & x & ": " & rs.fields("totvendas") & "<br>"
  contador =  contador + Rs.fields("totvendas")
  Rs.MoveNext
Loop
response.write "total geral : " & contador
%>

Link para o comentário
Compartilhar em outros sites

  • 0

resultou!!

antes de mais quero agradecer a voces pela ajuda

já consegui obter resultado certo desta forma:

----

rs02.open "SELECT count(tabela1.id) AS total FROM tabela1 WHERE tabela1.id=100 UNION ALL SELECT count(tabela2.id) as total FROM tabela2 WHERE tabela2.id=100 UNION ALL SELECT count(tabela3.id) as total FROM tabela3 WHERE tabela3.id=100 UNION ALL SELECT count(tabela4.id) as total FROM tabela4 WHERE tabela4.id=100 UNION ALL SELECT count(tabela5.id) as total FROM tabela5 WHERE tabela5.id=100", conn, 1, 3

total = 0

Do while not rs02.eof

total = total + rs02("total")

rs02.movenext

loop

----

estava faltando a tabela antes do campo: tabela1.id

reparem o tempo que leva a processar:

tempo1: 1.5 seg.

tempo2: 1.8 seg.

tempo3: 2.9 seg.

tempo4: 1.4 seg.

tempo5: 1.3 seg.

Da outra forma que eu tinha, assim, com 5 chamadas:

---

rs02.open "SELECT count(id) AS total1 FROM tabela1 WHERE id=100", conn, 1, 3

total1 = rs02("total1")

rs02.close

rs02.open "SELECT count(id) AS total2 FROM tabela2 WHERE id=100", conn, 1, 3

total2 = rs02("total2")

rs02.close

rs02.open "SELECT count(id) AS total3 FROM tabela3 WHERE id=100", conn, 1, 3

total3 = rs02("total3")

rs02.close

rs02.open "SELECT count(id) AS total4 FROM tabela4 WHERE id=100", conn, 1, 3

total4 = rs02("total4")

rs02.close

rs02.open "SELECT count(id) AS total5 FROM tabela5 WHERE id=100", conn, 1, 3

total5 = rs02("total5")

rs02.close

total = total1 + total2 + total3 + total4 + total5

---

demorava:

tempo1: 1.9 seg.

tempo2: 2.9 seg.

tempo3: 2.3 seg.

tempo4: 1.6 seg.

tempo5: 2.1 seg.

O que quando registos muito grandes (neste caso eram apenas 100) nota-se bem a diferenca de tempo e performance.

muito obrigado pela ajuda!

nuno.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...