I want to count all rows from the game_votes where g_id is equal to 14, it is working almost good, but if there aren’t any records with g_id = 14 it does still show 1 in the cnt field.
Here is my query:
SELECT
SUM(vote) as vote,
COUNT(*) as cnt
FROM (`games`)
LEFT JOIN `game_votes`
ON
`game_votes`.`g_id` = `games`.`id`
WHERE `games`.`id` = '14'
Whats wrong? Am I missing something?
You’re getting a count of 1 because COUNT(*) essentially counts the number of rows in your result set. Since you’re selecting a row out of your games table with an id of 14 and left joining that to the game_votes table, you’re going to always have 1 or more rows as long as there exists a game with an id of 14 regardless of whether or not it contains any corresponding votes in your game_votes table. Instead of COUNT(*), try COUNT(
game_votes.g_id). If there are no votes, the g_id field will contain a null value, and COUNT() will not include a null value in its calculation.