我要做的是从查询中对行进行编号,以便知道它将显示在哪个页面上。
我的查询类似于下面的查询。我的期望是查询返回的行的顺序与它们编号的顺序相同 - 即row_num
将在结果集中很好地递增。
问题在于GROUP BY
导致2-3行最终无序(删除了GROUP BY
个语句,所有编号都按顺序排列。)
我的实际查询还有更多的表连接等等,但我希望这种简化能让人们轻松解释GROUP BY
会导致我遇到的问题 - 更重要的是,如何在完成所有分组和排序后应用行编号。
提前致谢。
SELECT g2.*, @rownum := @rownum + 1 AS row_num
FROM (SELECT g.gemid as gemid, g.tab, rt.sum_rating as sum_rating
FROM gems g
LEFT JOIN (
SELECT gemid, SUM(rating) as sum_rating
FROM gemrating GROUP BY gemid) rt ON g.gemid = rt.gemid
WHERE g.tab=0 GROUP BY g.gemid) g2
LEFT JOIN gempage gp ON g2.gemid = gp.gemid
JOIN (SELECT @rownum := 0) Z
WHERE g2.tab=0 ORDER BY sort asc