MySQL ha un supporto speciale per questo genere di cose. Innanzitutto, includi SQL_CALC_FOUND_ROWS
nella tua SELEZIONE:
SELECT SQL_CALC_FOUND_ROWS *
FROM Badges
WHERE UID = '$user'
ORDER by Date DESC
LIMIT 10 -- Or whatever
Quindi estrai le righe e guarda immediatamente FOUND_ROWS()
così:
SELECT FOUND_ROWS()
per ottenere il numero di righe che corrispondono alla tua query originale senza considerare la clausola LIMIT.
Questo è specifico per MySQL, ma dovrebbe essere un po' più veloce che eseguire due query.