/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL: Betinget optælling via join?
Fra : Kim Bach Petersen


Dato : 17-01-09 18:11

Jeg har tre tabeller, en med nyheder, en med kommentarer til nyhederne
og en med brugere.

nyheder:   id, tekst, brugerid
kommentarer:   id, nyhedid, tekst, brugerid
brugere:   id, navn, rolle

Jeg vil gerne tælle antallet af kommentarer, når jeg henter nyhederne.
Detter er enkelt med et join:

SELECT nyhed.id,nyhed.tekst,count(DISTINCT kommentar.id) FROM nyhed
LEFT JOIN kommentar ON kommentar.nyhedid=nyhed.id GROUP BY nyhed.id

Nu er det imidlertid sådan, at nogle nyheder og kommentarer skal være
synlige for nogen brugere og ikke for andre.

Jeg kan nemt få knyttet brugerens rolle til idéerne og kun få vist de
nyheder, som brugeren må se:

SELECT nyhed.id,nyhed.tekst,brugere.navn,count(DISTINCT kommentar.id)
FROM nyhed
   JOIN brugere ON brugere.id=nyhed.brugerid
   LEFT JOIN kommentar ON kommentar.nyhedid=nyhed.id
   WHERE brugere.rolle="adm"
   GROUP BY nyhed.id

Problemet er at optællingen af antal kommentarer hér inkluderer alle
kommentarer uanset brugerens rolle. Optællingen skal såldes også gøres
afhængig af brugerens rolle, så antallet matcher det antal brugere
faktisk vil kunne se.

Hvordan gør man det???

Pft, Kim

 
 
Kim Bach Petersen (18-01-2009)
Kommentar
Fra : Kim Bach Petersen


Dato : 18-01-09 19:14

Kim Bach Petersen skrev:

> Problemet er at optællingen af antal kommentarer hér inkluderer alle
> kommentarer uanset brugerens rolle. Optællingen skal såldes også gøres
> afhængig af brugerens rolle, så antallet matcher det antal brugere
> faktisk vil kunne se.
>
> Hvordan gør man det???

Jeg fandt en løsning:

SELECT nyheder.id,nyheder.tekst,COUNT(DISTINCT kommentarer.id) FROM nyheder
LEFT JOIN brugere ON brugere.id=nyheder.brugerid
LEFT JOIN kommentarer ON kommentarer.nyhedid=nyheder.id
LEFT JOIN brugere AS brugere2 ON brugere2.id=kommentarer.brugerid
WHERE brugere.roller="adm" AND IFNULL(brugere2.roller,"")="adm"
GROUP BY nyheder.id

Kim

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste