Avatar billede jacand Nybegynder
26. juni 2006 - 21:46 Der er 11 kommentarer og
1 løsning

select i select eller.

Jeg sidder og roder med en select og jeg har snart ikke mere hår tilbage :-)

Jeg skal lave en select på auktioner_bud hvor jeg får sum af alle bud en bruger har lavet, men det skal kun være på de auktionnr som brugeren har det højeste bud på.
Jeg har "SELECT sum(bud) as totalbud from auktioner_bud where brugernr = '" & sessionbrugernr & "'") men det tager sum af alle bud og ikke kun dem har bud er højest i auktionnr.

Er der en der lige kan ryste en select ud af ærmet, så jeg kan beholde bare lidt af mit hår :-)
Avatar billede nielle Nybegynder
26. juni 2006 - 22:18 #1
Hvordan ser din tabel, auktioner_bud, egentlig ud? Hvilke felter er der i den?
Avatar billede jacand Nybegynder
26. juni 2006 - 23:08 #2
id,auktionnr,brugenr,bud,dato
Avatar billede nielle Nybegynder
27. juni 2006 - 08:17 #3
Prøv med denne her:

SELECT Sum(bud) AS sumBud FROM
(SELECT auktionnr, TOP 1 * FROM auktioner_bud GROUP BY auktionnr ORDER BY bud DESC)
WHERE brugernr = 42
Avatar billede jacand Nybegynder
27. juni 2006 - 18:39 #4
den gir : Incorrect syntax near the keyword 'TOP'.

jeg prøvede så med
"SELECT Sum(bud) AS sumBud FROM (SELECT TOP 1 * FROM auktioner_bud GROUP BY auktionnr ORDER BY bud DESC) WHERE brugernr = '" & sessionbrugernr & "'"
men den gir: Incorrect syntax near the keyword 'WHERE'.
Avatar billede nielle Nybegynder
27. juni 2006 - 19:04 #5
Prøv denne her:

SELECT Sum(t2.bud) AS sumBud FROM
(
    SELECT auktionnr, Max(bud) AS maxBud
    FROM auktioner_bud
    GROUP BY auktionnr
) AS t1,
auktioner_bud AS t2
WHERE
    t1.auktionnr = t2.auktionnr AND
    t1.maxBud = t2.bud AND
    t2.brugernr = 42
Avatar billede jacand Nybegynder
27. juni 2006 - 19:41 #6
gir: ]Invalid object name 'auktioner_bud'.

Jeg er stået af i den select :-) men det må være 
AS t1,
auktioner_bud AS t2
WHERE
den ikke kan li'
Avatar billede nielle Nybegynder
27. juni 2006 - 19:42 #7
Får du samme fejl med denne:

    SELECT auktionnr, Max(bud) AS maxBud
    FROM auktioner_bud
    GROUP BY auktionnr
Avatar billede nielle Nybegynder
27. juni 2006 - 19:43 #8
Jeg skal nok forklare når vi har fået det til at virke :^)
Avatar billede jacand Nybegynder
27. juni 2006 - 20:16 #9
Du er gud og jeg er en <:o)

Min tabel hed auktioer_bud da jeg jeg fik den rettet til auktioner_bud virker den bare perfekt :-)

SELECT Sum(t2.bud) AS sumBud FROM (SELECT auktionnr, Max(bud) AS maxBud FROM auktioner_bud GROUP BY auktionnr) AS t1, auktioner_bud AS t2 WHERE t1.auktionnr = t2.auktionnr AND t1.maxBud = t2.bud AND t2.brugernr =  '" & sessionbrugernr & "'"
Avatar billede nielle Nybegynder
27. juni 2006 - 20:33 #10
Ok, så lad mig forklare:

    SELECT Sum(t2.bud) AS sumBud FROM
    (
        SELECT auktionnr, Max(bud) AS maxBud
        FROM auktioner_bud
        GROUP BY auktionnr
    ) AS t1,
    auktioner_bud AS t2
    WHERE t1.auktionnr = t2.auktionnr AND
        t1.maxBud = t2.bud AND
        t2.brugernr =  '" & sessionbrugernr & "'"

Kernen er denne her:

    SELECT auktionnr, Max(bud) AS maxBud
    FROM auktioner_bud
    GROUP BY auktionnr

Det denne gør er at den finder det højeste bud for samtlige auktioner. Navnet, "aliaset", for dette er maxBud.

Når vi nu har fundet det højeste bud, skal vi så egentlig bare finde de poster i auktioner_bud hvor det var brugernr =  '" & sessionbrugernr & "'" som lagde det bud.

Med denne:

    (
        SELECT auktionnr, Max(bud) AS maxBud
        FROM auktioner_bud
        GROUP BY auktionnr
    ) AS t1

Bliver de højeste bud efterfølgende opfattet som om at de ligger i en tabel som hedder "t1".

Denne sammenlignes med samtlige bud i auktioner_bud (som lige får aliaset t2 for at minske skrivearbejdet!):

    SELECT * FROM
    (
        SELECT auktionnr, Max(bud) AS maxBud
        FROM auktioner_bud
        GROUP BY auktionnr
    ) AS t1,
    auktioner_bud AS t2

Nu skal vi jo så have de poster fra t2, som har samme auktionnr som i t1, samme bud som maxBud i t1 og hvor det er vores yndlingsbruger som har afgivet dem:

    SELECT * FROM
    (
        SELECT auktionnr, Max(bud) AS maxBud
        FROM auktioner_bud
        GROUP BY auktionnr
    ) AS t1,
    auktioner_bud AS t2
    WHERE t1.auktionnr = t2.auktionnr AND
        t1.maxBud = t2.bud AND
        t2.brugernr =  '" & sessionbrugernr & "'"

De skal så summeres sammen:

    SELECT Sum(t2.bud) AS sumBud FROM
    (
        SELECT auktionnr, Max(bud) AS maxBud
        FROM auktioner_bud
        GROUP BY auktionnr
    ) AS t1,
    auktioner_bud AS t2
    WHERE t1.auktionnr = t2.auktionnr AND
        t1.maxBud = t2.bud AND
        t2.brugernr =  '" & sessionbrugernr & "'"

Håber at det kastede lidt lys over "magien"?
Avatar billede jacand Nybegynder
27. juni 2006 - 20:58 #11
Ja når du forklare det er det jo rimeligt lige til, jeg har en masse select der nu skal ligges samme til en :-)

Tusind tak for hjælpen, smider du lige et svar.
Avatar billede nielle Nybegynder
27. juni 2006 - 21:22 #12
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
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