Two tables for storing comments
Disclaimer: I work with MSSQL most of the time, so my syntax might be a bit off.

Looking at your code : as you do GROUP BY c.id you will get 1 record per comment. (**) Each line will get the total sum of cr.vote values found for each comment. So far so good. 

But then it gets a bit muddy. It seems you want to add the author-information too, but you use a LEFT OUTER JOIN, meaning that you expect/prepare for some comments to have an author id that is not present in the users table?! Is this by design? If not I'd suggest to change the OUTER JOIN into an inner JOIN and additionally to put a FOREIGN KEY from the author field towards the users-id field. This way you prevent 'bad data' and it also tells the RDBMS that there always will be a matching record.

In MSSQL, a SUM() or MAX() on purely NULLs (= what will get returned from the LEFT OUTER JOIN in case no matching comments_ratings records exist) will return a NULL. You seem to try to catch this by using the IF() construction but I'd rather suggest to a 'COALESCE()` with some default value, probably zero.

As such you'd get:

SELECT c.id, 
       c.text, 
       c.time, 
       c.author, 
       u.email AS author_name, 
       COALESCE(SUM(cr.vote), 0) AS rating,
       COALESCE(MAX(cr.vote), 0) AS voted

  FROM comments c 
 JOIN users u ON u.id = c.author  
 LEFT OUTER JOIN comments_ratings cr ON c.id = cr.comment
GROUP BY c.id, c.text, c.time, c.author, u.email


**: As you can see I've added all fields that are not aggregated to the GROUP BY clause, in MSSQL this is a requirement for the syntax to be valid; I believe this is not the case for mysql, but I see it as a good habit in all cases. (YMMV =)