【问题标题】:Get current rank joining another table, MySql获取当前排名加入另一个表,MySql
【发布时间】:2013-11-01 10:40:40
【问题描述】:

对不起,如果我问这个问题,也许它有一个简单的解决方案,但我现在挠了三天,找不到好的解决方案。

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

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)。

I.E. “街机类别”排名:

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

完成类似任务的最佳方法是什么?

提前感谢大家!

【问题讨论】:

    标签: mysql ranking rank


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多