Avatar billede luzk Nybegynder
25. juli 2002 - 13:54 Der er 5 kommentarer og
1 løsning

Select count fra to tabeller

Hej,

Jeg er ved at lave en lille konkurrence, hvor folk skal vælge mellem nogle spørgsmål, og svare rigtigt på så mange som muligt.

de to tabeller jeg har lavet ser således ud:
contestAnswers: userID, answerGiven1, answerGiven2..., answerGiven15
correctAnswers: answerID, correctAnswer
den første indeholder det brugerne har svaret, og den sidste indeholder svarene på spørgsmålene

grunden til det er at jeg derved kunne lave en union mellem de to tabeller, og derved se hvor mange rigtige hver enkelt bruger har, fx:

SELECT *
FROM competitionAnswers, correctAnswers
WHERE competitionAnswers.answerGiven1 = correctAnswers.answerCorrect
    AND correctAnswers.answerID = 1
UNION
SELECT *
FROM competitionAnswers, correctAnswers2
WHERE competitionAnswers.answerGiven2 = correctAnswers.answerCorrect
    AND correctAnswers.answerID = 2

det jeg her får ud, er en liste med brugere der har svaret rigtigt på spørgsmål 1 og/eller spørgsmål 2 - har de svaret rigtigt på begge kommer der to rows ud

mit spørgsmål er, om man ikke kan lave en count på det samlede antal rows pr. bruger, så man kan se hvor mange rigtige de har?
Avatar billede tmceu Praktikant
25. juli 2002 - 14:13 #1
Du kunne jo bruge en GROUP BY med en COUNT. Et simplificeret eksempel

SELECT Bruger, COUNT(CorrectAnswers) AS Antal
GROUP BY Bruger
Avatar billede luzk Nybegynder
25. juli 2002 - 15:42 #2
Jo det er jeg godt klar over, og har prøvet men kan ikke få det til at virke når jeg samler de to tabeller....
Avatar billede tmceu Praktikant
25. juli 2002 - 16:06 #3
Så kunne det være noget med en midlertidig tabel. Jeg kan ikke se din tabeldefinition, så det bliver igen et simplificeret eksempel:

Opret en midlertidig tabel:

CREATE TABLE #MyTempTable(
-- tabeldefinition
)


Indsæt data fra begge tabeller:
INSERT INTO TABLE #MyTempTable

SELECT *
FROM competitionAnswers, correctAnswers
WHERE competitionAnswers.answerGiven1 = correctAnswers.answerCorrect AND correctAnswers.answerID = 1

UNION ALL

SELECT *
FROM competitionAnswers, correctAnswers2
WHERE competitionAnswers.answerGiven2 = correctAnswers.answerCorrect AND correctAnswers.answerID = 2

Og når du skal se de samlede resultater, kan du bruge GROUP BY på den midlertidige tabel:

SELECT Bruger, COUNT(Felt) AS Antal
FROM #MyTempTable
GROUP BY Bruger
Avatar billede luzk Nybegynder
26. juli 2002 - 09:03 #4
tmceu~~>>jeg går ud fra at temp tabellen skal slettes efter brug?

tak for hjælpen
smid et svar, så får du point :o)
Avatar billede tmceu Praktikant
26. juli 2002 - 09:44 #5
Det var så lidt :-)

Temp tabellen dør aut. når du lukker din connection, men du kan godt lave en eksplicit DROP TABLE, hvis du ønsker det.
Avatar billede luzk Nybegynder
26. juli 2002 - 10:20 #6
ok - vil det være muligt at køre noget lignende via en stored procedure el.lign, for i øjeblikket er der temmelig mange brugere, og derfor mange entries der skal løbes igennem, og hvis det skal over en webserver til en database server og så tilbage igen til brugeren med noget scriptsprog vil det være ret langsomt...
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