Avatar billede thomasabcd Nybegynder
30. december 2006 - 04:17 Der er 12 kommentarer og
1 løsning

Tælle stemmer inkl 0

Jeg er ved at lave noget, hvor brugerne kan stemme på hinanden. Jeg har én tabel med kategorier, én anden med brugerne og én tredje med sammenhængen mellem brugere og kategorier. Jeg kan godt tælle hvor mange gange en bruger har fået nogle stemmer UNDTAGEN hvis brugeren IKKE har fået nogle stemmer i en given kategori. Hvordan gør jeg det? Pt gør jeg således:
SELECT    kategorier.ID, kategorier.Text, COUNT(brugerKategorier.KategoriID) AS VoteCount
FROM        brugere INNER JOIN
                      brugerKategorier ON bruger.ID = brugerKategories.BrugerID RIGHT OUTER JOIN
                      kategorier ON brugerKategorier.KategoriID = kategorier.ID
GROUP BY kategorier.ID, kategorier.Text
HAVING      (bruger.ID = @brugerID)

Hvis en bruger har fået 3 stemmer i en kategori, går det fint, men hvis han har fået 0 stemmer i en anden kategori, kan jeg ikke få dét returneret
Avatar billede thomasabcd Nybegynder
30. december 2006 - 04:17 #1
eksempelvis : Hvis en bruger har fået 3 stemmer i en kategori, går det fint, men hvis han har fået 0 stemmer i en anden kategori, kan jeg ikke få dét returneret
Avatar billede simplus Nybegynder
30. december 2006 - 04:19 #2
Hvilken type er feltet som indeholder stemmerne?
og er du sikker på at feltet indeholder et 0 tal hvis en bruger ikke har fået stemmer?
Avatar billede thomasabcd Nybegynder
30. december 2006 - 04:21 #3
Nej, det indeholder ikke noget. Den returnerer kun rækker, hvor der er noget at tælle. Så hvis en bruger ikke har fået nogle stemmer, returnerer den ikke rækken
Avatar billede simplus Nybegynder
30. december 2006 - 04:23 #4
Aha, så er det jo klart!

Gør således at der bliver indsat et 0 som default og problemet burde løses...
Avatar billede thomasabcd Nybegynder
30. december 2006 - 04:29 #5
Men så skal jeg jo indsætte 0 for hver bruger og hver kategori? Jeg har jo alle kategorier i en tabel. Så kan jeg ikke lave noget,hvor jeg looper igennem kategorierne og hvor jeg tæller antallet af stemmer for hver kategori, og hvis der så ikke returneres noget for den pågældende kategori, returneres 0?

I C# ville jeg gøre noget a la:
foreach(Kategori in Kategorier)
{
  int count = HENT STEMMER pr Kategori for den pågældende bruger;
}

Det vil loope igennem alle kategorier og tjekke hver enkelt kategori for antallet af stemmer, som brugeren har fået
Avatar billede simplus Nybegynder
30. december 2006 - 04:35 #6
Prøver lige at bixe en sql sammen, men du kan da sagtens bruge den du har lavet i C# så vidt jeg ved. (bruger ikke med C#!)

bare connect til databasen via C# og kør loppet.

Husk for guds skyld at tage backup af din tabel inden du kører noget som helst loop!
Avatar billede simplus Nybegynder
30. december 2006 - 04:36 #7
istedet for:

(bruger ikke med C#!)

skulle der have stået:

(bruger sjældent C#!)

det er vidst ved at være sent, min grammatik forsvinder langsomt :-)
Avatar billede simplus Nybegynder
30. december 2006 - 04:42 #8
Jeg fik lavet noget sql kode som måske kan bruges - jeg tænker trods alt ikke klart på dette tidspunkt af dagen.

$vaerdi = "0";
mysql_query("INSERT INTO tabel (vote) VALUES ('$vaerdi') WHERE `stemme` = ''") or die(mysql_error());

den kører du bare ved at sætte en variabel der tæller hvor mange felter der er og sætter en session der indeholder det antal felter som er blevet 'opdateret' når de to tal er ens skal loopet stoppe.

NB. husk igen for en sikkerhedsskyld at tage backup af din tabel inden du prøver noget!
Avatar billede simplus Nybegynder
30. december 2006 - 04:53 #9
Jeg smutter i seng nu, kigger forbi tråden igen imorgen.
Avatar billede thomasabcd Nybegynder
30. december 2006 - 05:08 #10
jeg dribler også i seng. Kan ikke helt gennemskue din query. Det er en insert, men jeg skal jo bruge en select?
Avatar billede dr_chaos Nybegynder
30. december 2006 - 11:25 #11
prøv evt med:
SELECT    kategorier.ID, kategorier.Text, COUNT(brugerKategorier.KategoriID) AS VoteCount
FROM        brugere LEFT JOIN
                      brugerKategorier ON bruger.ID = brugerKategories.BrugerID RIGHT OUTER JOIN
                      kategorier ON brugerKategorier.KategoriID = kategorier.ID
GROUP BY kategorier.ID, kategorier.Text
HAVING      (bruger.ID = @brugerID)
Avatar billede thomasabcd Nybegynder
12. august 2007 - 19:12 #12
burde have lukket for længst. Smid et svar begge to
Avatar billede dr_chaos Nybegynder
14. august 2007 - 19:31 #13
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