Mysql - Laravel - 排序依据和 rownum 位置在 2 个查询中不同步

Mysql - Laravel - order by and rownum position not in sync in 2 queries

所以我有一个用户列表,他们收到选票,他们按选票 DESC 排序,但是我有另一个查询来获取他们当前的位置 I.E.第一名、第二名、第十名等

问题是当人们获得相同数量的选票时,位置与他们出现的顺序不同步,

例如,在第 130 位有 1 票的用户将出现在第 125 位有 1 票的用户之前。

这不是一个大问题,而是一个非常烦人的问题,有没有有效的方法来处理这个问题?我考虑过计算位置并将其存储为一列,但问题是我必须在每次投票后为每个人重新计算位置,这效率太低了。

这是两个查询:

// get the list of participants ordered by votes DESC
Participant::with('user')
                  ->where('contest_id', $cid)->orderBy('vote_count', 'DESC')
                  ->paginate(28);

// get the position of a participant
\DB::select(
            'SELECT position FROM
              (SELECT user_id, @rownum := @rownum + 1 as position 
              FROM contest_participants 
              JOIN (SELECT @rownum := 0) r 
              WHERE contest_id = ? ORDER BY vote_count DESC) b 
              WHERE user_id = ?', [$cid, $pid]);

我觉得可以按ORDER BY vote_count DESC, user_id ASC等两个条件下单。如果我没记错的话。