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