26. juni 2006 - 21:46Der 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 :-)
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'.
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
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 & "'"
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 & "'"
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.