2013-10-23 1 views
0

죄송합니다.이 질문을받는다면 어쩌면 간단한 해결책이 있지만 3 일 동안 머리를 긁적이며 좋은 해결책을 찾을 수 없습니다.다른 테이블, MySql에 합류하여 현재 계급을 받으십시오.

두 테이블이 있는데, 하나는 "합계"를 정의하고 다른 하나는 "세부 사항"을 정의하는 테이블입니다.

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의 순위를받을 수 있나요? 이 두 테이블을 결합하여 이와 같은 것을 얻을 수있는 방법은 무엇입니까? (명심하십시오 : item_id.Table_Totals = item_id.Table_Details).

I.E. "아케이드 카테고리"순위 :

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

비슷한 것을 달성하는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다!

답변

1

일대일 관계를 가정하면, 사용자 변수이 같은 (테스트되지 않음)를 사용하여 -

SELECT a.item_id, a.category, @rank:[email protected] + 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 
관련 문제