所以我有一个收到投票的用户列表,他们按投票 DESC 排序,但随后我有另一个查询来获取他们当前的位置,即第一名、第二名、第十名等。
问题是当人们拥有相同的票数时,位置与他们出现的顺序不同步,
例如,在第 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
。如果我没记错的话。
关于php - Mysql - Laravel - order by 和 rownum 位置在 2 个查询中不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30897807/