Okay, I'm really confused.
If you only want to show, say, the first 10 in ranking, then why wouldn't you just do
and then do the counting in PHP, as you suggested?
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
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?
And now the value of placement tells you exactly where Sally (or $userid) stands.
$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";
EDIT: Tested it, even. It works.