I am creating a bulletin board application. Each bulletin can be liked or disliked by users of the site.To keep track of the likes and dislikes I have created the following database table
id user_id bulletin_id like_dislike
1 1 1 1
2 1 2 0
3 3 1 1
4 2 1 0
In the like_dislike column 1 means ‘Like It’, 0 means ‘Don’t like it’
I know how to ask.
– How many times was bulletin 1 liked (2)
– How many times was bulletin 1 disliked (1)
But How do I do a query to ask those two questions at the same time? That is, how many times was bulletin 1 liked and disliked
liked disliked
2 1
I have tried the query
SELECT count(like_dislike) AS likes, count(like_dislike) AS dislikes FROM bulletins_ld
where bulletins_id = 1 AND likes = 1 AND dislikes = 0
but all I get is two twice which is not surprising.
The only solution I can think of is having a separate like and dislike column
You can do this with an aggregate query, using opposing conditions on the single like_dislike column (I am assuming below that a ‘1’ in that column means ‘liked’).
Update: As per the discussion in the comments below, the like/dislike column could be normalized into its own table, like so (example deliberately silly…):
The Likes_Dislikes column in the Bulletin table is then replaced by the foreign key
feeling_id, with a default to 0. Let’s say that you then enter a record in this table when a user first views a bulletin, making them “Undecided” by default, and update that record when they vote on the bulletin. You could query the results like so:Keep in mind, this is just one approach, and may not be useful in your case. But if you ever decided to change or expand the model by which a user expresses their feelings for a bulletin, say to a five-star rating system, you could do that without changing the database schema – just alter the records in the
how_user_feelstable, and the associated queries.