Я бы, наверное, сделал это так:
SELECT
user_id,
score,
rank
FROM
(
SELECT
TP.user_id,
(TP.correct * 10) + (COUNT(TQ.sender_id) * 30) AS score,
@rank:=@rank + 1 AS rank
FROM
Trivia_Players TP
LEFT OUTER JOIN Trivia_Questions TQ ON
TQ.sender_id = TP.user_id
GROUP BY
TP.user_id,
TP.correct
ORDER BY
score DESC
) AS SQ
WHERE
SQ.user_id = $user_id
Я не очень часто использую MySQL, поэтому синтаксис может быть не идеальным. Я думаю, что вы можете использовать подобный подзапрос в MySQL. Предполагая, что MySQL обрабатывает COUNT (), считая только строки с ненулевым значением, это должно работать.
Ключи в том, что вы выполняете COUNT для столбца, отличного от NULL, из вопросов викторины, чтобы он подсчитывал их пользователем, и вам нужно использовать подзапрос, чтобы вы могли получать ранги для каждого, ДО ограничения для конкретного пользователя ID.