Avatar billede jnissen Nybegynder
06. juli 2003 - 13:41 Der er 17 kommentarer og
1 løsning

Spørgsmål vedr. sortering.

Hej.

Jeg ved ikke helt hvordan jeg skal forklare mit problem men jeg prøver.

Jeg har to tabeller i min database. I den ene der nogle medlemmer, og i den anden oplysninger om disse.

I hver tabel med oplydninger er der 3-4 poster pr person. Der er et felt i hver post som hedder total som er et tal-felt.

Det jeg gerne vil have er at når jeg skal liste personerne, skal den sortere efter den person der har det højeste totalt sammenlagt. Man skal altså ligge de 3-4 total sammen, og sortere efter dem.

Var der nogen som fik fat i det? :-)
Avatar billede medions Nybegynder
06. juli 2003 - 13:43 #1
strSQL = "SELECT * FROM tblPersoner ORDER BY Total"

//>Rune
Avatar billede jnissen Nybegynder
06. juli 2003 - 14:00 #2
Nej ikke på den måde. "Total" ligger i en anden tabel, og de skal også ligges sammen først.
Avatar billede eagleeye Praktikant
06. juli 2003 - 14:30 #3
Prøv noget med JOIN som denne.

SELECT Sum(xx.total) AS SumOftotal, medlemmer.id, medlemmer.navn
FROM medlemmer LEFT JOIN xx ON medlemmer.id = xx.id
GROUP BY medlemmer.id, medlemmer.navn
ORDER BY Sum(xx.total) DESC
Avatar billede jnissen Nybegynder
06. juli 2003 - 16:31 #4
hmmm....er det noget du kan forklare lidt nærmere?
Jeg afsætter gerne flere point.
Avatar billede eagleeye Praktikant
06. juli 2003 - 17:35 #5
Et lille eks hvis du har medlemmer tabel og xx tabellen

medlemmer:
ID  navn
1    A
2    B

xx
aID  ID  total
1    1  10
2    1  10
3    1  5
4    2  9
5    2  8
6    1  7

Så kan man JOIN'ne de to tabeller samme hvor de har nogeet til fælles, det er så ID som i xx tabellen gør man ved hvilken record i medlemmer tabellen den høre til. Så tabelle efter JOING ser sådan her ud:

medlemmer|xx
ID  navn  ID  total
1    A    1  10
1    A    1  10
1    A    1  5
1    A    1  7
2    B    2  9
2    B    2  8

Men den skal lave en Sum(total) og der er indsat GROUP BY (id,navn) så den gruppere alle som har nogle ens felter samme her ID og navn, så summeres total hvor id'er ens så der bliver en sum hvor hver person, så man til sidst har dette tilbage og det som man får i recordsetet

ID  navn  antal
1    A    32
2    B    17
Avatar billede jnissen Nybegynder
06. juli 2003 - 19:05 #6
Hej igen.

Jeg har nu prøvet det, men det virker ikke helt. Den viser kun én post - dog den med højest totalt.

Jeg skulle også gerne kunne hente flere felter fra databasen end id og navn.
Avatar billede eagleeye Praktikant
06. juli 2003 - 19:08 #7
Så må du skrive dem efter SELECT og i GRUOP BY


SELECT Sum(xx.total) AS SumOftotal, medlemmer.id, medlemmer.navn, medlemmer.HHH, medlemmer.YYY
FROM medlemmer LEFT JOIN xx ON medlemmer.id = xx.id
GROUP BY medlemmer.id, medlemmer.navn, medlemmer.HHH, medlemmer.YYY
ORDER BY Sum(xx.total) DESC
Avatar billede jnissen Nybegynder
06. juli 2003 - 19:13 #8
Den viser desværre stadig kun én post.
Avatar billede eagleeye Praktikant
06. juli 2003 - 19:23 #9
Den viser en post for hver bruger ?
Avatar billede jnissen Nybegynder
06. juli 2003 - 19:26 #10
nej den viser kun én bruger.
Avatar billede eagleeye Praktikant
06. juli 2003 - 19:28 #11
Passer summen med den bruger som bliver vist eller er det summe af alle brugeres total???
Umiddelbart lyder det som om enten der kun er en bruger eller hvordan udskriver du det, i et do while not rs.EOF looo?
Avatar billede jnissen Nybegynder
06. juli 2003 - 19:40 #12
Nej det er jo pinligt - jeg havde totalt glemt at loope den igennem :-) Sorry

Jeg vil gerne udskrive summen, men hvordan gør jeg det?

Hvis jeg forhøjre til 200 point, er så frisk på følgende:

Jeg skal på en anden side gøre det samme, her må den bare ikke vise de poster hvor feltet 'mm' og 'km' er = JA. mm og km ligger i medlems-tabellen.

På den første side, kan jeg godt komme ud for at der er flere som får samme sum, kan jeg så bare gøre sådan: ORDER BY Sum(xx.total), medlemmer.felt2, medlemmer.felt3 DESC, eller hvordan gør man det?
Avatar billede eagleeye Praktikant
06. juli 2003 - 19:44 #13
Jo man kan havde flere ORDER BY man kan styre dem hver forsig med DESC eller ASC..

ORDER BY Sum(xx.total) DESC, medlemmer.felt2, medlemmer.felt3 DESC
Avatar billede eagleeye Praktikant
06. juli 2003 - 19:56 #14
Du kan tilføje en WHERE på som tjekker på mm og km

SELECT Sum(xx.total) AS SumOftotal, medlemmer.id, medlemmer.navn, medlemmer.HHH, medlemmer.YYY
FROM medlemmer LEFT JOIN xx ON medlemmer.id = xx.id
WHERE medlemmer.mm <> 'ja' AND medlemmer.km <> 'ja'
GROUP BY medlemmer.id, medlemmer.navn, medlemmer.HHH, medlemmer.YYY
ORDER BY Sum(xx.total) DESC
Avatar billede jnissen Nybegynder
06. juli 2003 - 20:08 #15
Det ser skisme ud til at virke. Jeg takker og bukker rigtig mange gange.
Du er bare kanon - mange tak for hjælpen :-)
Avatar billede jnissen Nybegynder
06. juli 2003 - 20:08 #16
Hvordan var jeg det jeg kunne få vist summen?
Avatar billede eagleeye Praktikant
06. juli 2003 - 20:10 #17
Den er lavet som et alias SumOftotal    Sum(xx.total) AS SumOftotal

Du skriver den som en hver anden kolonne fra et recordset så det er:

rs("SumOftotal")
Avatar billede jnissen Nybegynder
06. juli 2003 - 20:22 #18
nå okay - jeg havde prøvet <%= sumoftotal %> - men det er bare rs jeg mangler.

Jeg takker endnu engang.
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
Kurser inden for grundlæggende programmering

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