Okay, I'm really confused.
If you only want to show, say, the first 10 in ranking, then why wouldn't you just do
SELECT COUNT(votes.vote_id) as vote_count, users.firstname, users.lastname
LEFT JOIN votes on (votes.user_id = users.user_id)
GROUP BY votes.user_id
ORDER BY vote_count
and then do the counting in PHP, as you suggested?
Or is it that you want to be able to say, when Sally logs in, "Congratulations, you are in 3rd place"????
If that is the case, then you don't want that simple-minded query, in the first place!
When Sally logs in, surely one of the things you do is go grab her USER_ID from the users table and store it in a session variable, no?
$sql = "SELECT 1 + COUNT(*) AS placement FROM (
SELECT user_id, COUNT(*) AS vcount FROM votes GROUP BY user_id
HAVING vcount > ( SELECT COUNT(*) AS uvotes FROM votes WHERE user_id = $userid )
) AS V";
And now the value of placement
tells you exactly where Sally (or $userid) stands.
EDIT: Tested it, even. It works.