sql >> Database >  >> RDS >> PostgreSQL

Krijg alle berichten met de som van stemmen en of de huidige gebruiker op elk bericht heeft gestemd

Je bent er bijna met je vraag. Gebruik gewoon filter clausule om het aantal stemmen van de huidige gebruiker te krijgen

SELECT 
    post.postID as postID, 
    post.title as title, 
    post.author as author,
    post.created as created,
    COALESCE(sum(votes.vote), 0) as voteCount, 
    COALESCE(sum(votes.vote) filter (where votes.username= 'username'), 0) as userVote  -- in '' just provide username for current login user
FROM post 
LEFT JOIN votes ON post.postID = votes.postID 
GROUP BY 1,2,3,4 
ORDER BY 5 DESC

Een andere manier is door nog een linker join te gebruiken, zoals hieronder:

SELECT 
    p.postID as postID, 
    p.title as title, 
    p.author as author,
    p.created as created,
    COALESCE(sum(v1.vote), 0) as voteCount, 
    COALESCE(v2.vote , 0) as userVote  -- in '' just provide username for current login user
FROM post p
LEFT JOIN votes v1 ON p.postID = v1.postID 
LEFT JOIN votes v2 on p.postID = v2.postID and v2.username='username'
GROUP BY 1,2,3,4,v2.vote
ORDER BY 5 DESC

DEMO




  1. Top 10 spelers met het hoogste slaggemiddelde

  2. php hoe te gebruiken selectievak voor zoekgegevens in lijstweergave (tabel)

  3. Multidimensionale geneste array maken van MySQL-resultaat met dubbele waarden (PHP)

  4. Verbindingstime-outs voor grote MySQL-imports voorkomen