获取当前排名加入另一个表MySql

时间:2013-10-23 08:40:11

标签: mysql ranking rank

很抱歉,如果我问这个问题,也许它有一个简单的解决方案,但我现在已经三天摸不着头脑了,我找不到一个好的解决方案。

我有两个表,一个定义“总计”,另一个表定义“详细信息”。

Table_Totals

|item_id|user_rating| rating_count|
| 1     |      5.000|            5|
| 2     |      2.000|            3|
| 3     |      1.000|            5|
| 4     |      3.000|            2|
| 5     |      4.000|            8|

我可以通过此查询轻松获得每个item_id的“排名”:

SELECT uo . * , (
     SELECT COUNT( * ) 
        FROM Table_Totals ui
        WHERE (ui.user_rating, ui.item_id) >= ( uo.user_rating, uo.item_id )
        ) AS rank
        FROM Table_Totals uo
    WHERE item_id = 3

所以,我得到了这个(全球排名):

|item_id|user_rating| rating_count|rank|
| 3     |      1.000|            5|   5|

现在,我还有这个表(定义“细节”):

Table_Details

|item_id|category| players|
| 1     |  arcade|     113|
| 2     |     RPG|      31|
| 3     |  arcade|     522|
| 4     |  arcade|     100|
| 5     |  MMORPG|      82|

我的问题是:如何获得item_id BY类别的排名?我如何加入这两个表并得到这样的东西? (请记住:item_id.Table_Totals = item_id.Table_Details)。

即。 “街机类别”排名:

|item_id|category| rank|
| 1     |  arcade|    1|
| 3     |  arcade|    3|
| 4     |  arcade|    2|

实现类似目标的最佳方式是什么?

提前感谢所有人!

1 个答案:

答案 0 :(得分:1)

假设一对一的关系,并使用类似这样的用户变量(未经测试): -

SELECT a.item_id, a.category, @rank:=@rank + 1 as rank
FROM Table_Details a
INNER JOIN Table_Totals b
ON a.item_id = b.item_id
CROSS JOIN (SELECT @rank:=0) Sub1
WHERE category = 'arcade'
ORDER BY b.user_rating DESC