MySQL har något speciellt stöd för den här typen av saker. Inkludera först SQL_CALC_FOUND_ROWS
i ditt SELECT:
SELECT SQL_CALC_FOUND_ROWS *
FROM Badges
WHERE UID = '$user'
ORDER by Date DESC
LIMIT 10 -- Or whatever
Dra sedan ut dina rader och titta sedan omedelbart på FOUND_ROWS()
så här:
SELECT FOUND_ROWS()
för att få antalet rader som matchade din ursprungliga fråga utan att ta hänsyn till LIMIT-satsen.
Det här är MySQL-specifikt men det borde vara lite snabbare än att göra två frågor.