Avatar billede ttopholm Nybegynder
11. januar 2007 - 08:56 Der er 16 kommentarer og
2 løsninger

Sammensætte 3 sætninger

Jeg har disse tre sætninger:

SQL = "SELECT sum(adinbytes) AS inbytes, sum(adoutbytes) AS outbytes, liip FROM accountingdata INNER JOIN accountingperiod ON adpe_key = peid INNER JOIN localip ON adli_key = liid INNER JOIN traffictype ON adtt_key = ttid  WHERE pefromstamp>=" & startdato & " AND pefromstamp<" & slutdato & " AND liip = '" & rs("ip") & "' AND ttname = 'Internationalt' GROUP BY liip"
   
SQL1 = "SELECT sum(adinbytes) AS inbytes, sum(adoutbytes) AS outbytes, liip FROM accountingdata INNER JOIN accountingperiod ON adpe_key = peid INNER JOIN localip ON adli_key = liid INNER JOIN traffictype ON adtt_key = ttid  WHERE pefromstamp>=" & startdato & " AND pefromstamp<" & slutdato & " AND liip = '" & rs("ip") & "' AND ttname = 'Lokalt' GROUP BY liip"
   
SQL2 = "SELECT sum(adinbytes) AS inbytes, sum(adoutbytes) AS outbytes, liip FROM accountingdata INNER JOIN accountingperiod ON adpe_key = peid INNER JOIN localip ON adli_key = liid INNER JOIN traffictype ON adtt_key = ttid  WHERE pefromstamp>=" & startdato & " AND pefromstamp<" & slutdato & " AND liip = '" & rs("ip") & "' AND ttname = 'Dansk' GROUP BY liip"

Hver især tager den den samme ip, og start og slutdato og kører igennem, og finder resultaterne for Dansk, Int, og lokalt. Men synes det virker lidt at kører igennem 3 gange. Jeg ved godt at jeg bare kan lave en hvor man trækker det hele ud engang, og beregner så på det, når man kører den igennem, men kan man ikke ikke kombinere det, så man kun laver et kald og får 6 værdier ud i en omgang.
Avatar billede fixxxer Nybegynder
11. januar 2007 - 09:05 #1
UNION måske?
Avatar billede fixxxer Nybegynder
11. januar 2007 - 09:06 #2
SQL & " UNION " & SQL1 & " UNION " & SQL2
Avatar billede ttopholm Nybegynder
11. januar 2007 - 09:07 #3
også bare kalde hvert output noget andet vel?
Avatar billede fixxxer Nybegynder
11. januar 2007 - 09:10 #4
Hvis du kalder ovenstående med UNION mellem hver SELECT blok, så får du et stort resultat tilbage.
Avatar billede fixxxer Nybegynder
11. januar 2007 - 09:10 #5
Det skulle nok hedde "ét stort resultat"..
Avatar billede ttopholm Nybegynder
11. januar 2007 - 09:15 #6
jamen jeg skal jo bruge hvert enkelt resultat...
Avatar billede fixxxer Nybegynder
11. januar 2007 - 09:18 #7
Ja og det får du også..

Men i stedet for at du først kører SQL og får fx 3 resultater tilbage, og så kører SQL1 og får 5 resultater tilbage, så kan du ved at bruge UNION få alle 8 resultater tilbage på en gang.

Er det ikke det du vil?
Avatar billede ttopholm Nybegynder
11. januar 2007 - 09:20 #8
Jo... Korrekt... ;-)

Og de kommer i den rækkefølge de er angivet eller hvad...
Avatar billede fixxxer Nybegynder
11. januar 2007 - 09:22 #9
Ja, men du kan smide en ORDER BY på i enden af din statement, så sorterer den ud over det sammlede resultat.

SQL & " UNION " & SQL1 & " UNION " & SQL2 & " ORDER BY inbytes"
Avatar billede ttopholm Nybegynder
11. januar 2007 - 09:24 #10
Okay, men er den egentlig hurtigere end at have tre separate sætninger, da den alligevel laver kaldet 3 gange jo...
Avatar billede fixxxer Nybegynder
11. januar 2007 - 09:27 #11
Ikke nødvendigvis.. Databasen er optimeret til at returnere et resultat, hvor ASP skal spørge i 3 selvstændige omgange for at få det samme resultat kontra 1 resultat.

Men det nemmeste er vel at sammenligne?
Avatar billede ttopholm Nybegynder
11. januar 2007 - 09:29 #12
Ja.. Det er rigtigt...

Men ville det egentlig være hurtigere at kører via perl (DBI) end gennem asp/vbscript.
Avatar billede fixxxer Nybegynder
11. januar 2007 - 09:41 #13
Det kan jeg ikke svare dig på. Det ligger uden for mit kompentenceområde.
Avatar billede ttopholm Nybegynder
11. januar 2007 - 09:56 #14
Når står der at union kun giver distinct, så hvis jeg f.eks. har flere der er 0, så får jeg mindre resultater ud vel...
Avatar billede fixxxer Nybegynder
11. januar 2007 - 11:06 #15
http://dev.mysql.com/doc/refman/5.0/en/union.html


Så skal du formodenligt bruge UNION ALL
Avatar billede ttopholm Nybegynder
11. januar 2007 - 11:33 #16
Jeg har lige testet scriptet med union og uden union. med union er den op til et sekund langsommere end uden union. meget underligt..
Avatar billede ttopholm Nybegynder
18. februar 2007 - 13:03 #17
Jeg fik der der styrer databasen, til at smide en masse index'er ind og nu kører den bare derud af...

fixxxer smid et svar... så deler vi
Avatar billede fixxxer Nybegynder
18. februar 2007 - 14:02 #18
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester