2012-08-31 9 views
6

मैं एक मेज उपयोगकर्ताओं है:MySQL का चयन उपयोगकर्ता की जगह

id | rating 
1  4 
2  -1 
3  12 
4  0 
5  2 
6  0 

मैं प्रयोक्ता की जगह रेटिंग के द्वारा आदेश कैसे चुन सकते हैं जहां समान रेटिंग के साथ id = N और है कि उपयोगकर्ताओं को शीर्ष में एक ही जगह है?

युपीडी: मैं उत्पादन करना चाहते हैं:

तो userid = 1, उसकी rank is 2, अगर userid = 2, उसकी rank is 5, अगर userid = 3, rank is 1 ... लेकिन अगर userid = 4 या 6 उनके rank are 4 क्योंकि दरों के समान हैं।

+1

आप यहाँ दिखा सकते हैं उर उम्मीद उत्पादन क्या है? – AnandPhadke

उत्तर

4

मुझे लगता है कि आप asll user_id's` के लिए रेटिंग लगाना चाहते हैं:

SELECT id, 
     IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank, 
     (@var_rating_prev := rating) AS rating 
FROM table_name a,(SELECT @var_rank := 0, @var_rating_prev := 0) r 
ORDER BY rating DESC; 

उदाहरण @sqlfiddle

आप उत्पादन में रिकॉर्ड का क्रम बदलने के लिए नहीं करना चाहते हैं तो यह प्रयास करें:

SELECT a.*, b.rank 
FROM test_table a 
    INNER JOIN (
      SELECT id, 
        IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank, 
        (@var_rating_prev := rating) AS rating 
      FROM test_table a,(SELECT @var_rank := 0, @var_rating_prev := 0) r 
      ORDER BY rating DESC 
     ) b 
     ON a.id = b.id 
ORDER BY a.id; 
+2

ओपी एक दिए गए उपयोगकर्ता आईडी के लिए चाहता है कि रेटिंग सिस्टम में उसका रैंक क्या है – AnandPhadke

+0

ओह ठीक है .. धन्यवाद! मेरा जवाब अपडेट किया गया। – Omesh

+0

बढ़िया! आपको बहुत - बहुत धन्यवाद! – Isis

2
SELECT COUNT(*)+1 `rank` 
FROM table_name 
WHERE rating > (SELECT rating 
       FROM table_name 
       WHERE id = N) 
संबंधित मुद्दे