30. december 2006 - 04:17Der 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
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
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
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
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
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!
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)
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.