Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL तालिका में रैंक अपडेट करें

एक विकल्प रैंकिंग चर का उपयोग करना है, जैसे कि निम्न:

UPDATE   player
JOIN     (SELECT    p.playerID,
                    @curRank := @curRank + 1 AS rank
          FROM      player p
          JOIN      (SELECT @curRank := 0) r
          ORDER BY  p.points DESC
         ) ranks ON (ranks.playerID = player.playerID)
SET      player.rank = ranks.rank;

JOIN (SELECT @curRank := 0) भाग एक अलग SET . की आवश्यकता के बिना चर आरंभीकरण की अनुमति देता है आदेश।

इस विषय पर आगे पढ़ना:

टेस्ट केस:

CREATE TABLE player (
   playerID int,
   points int,
   rank int
);

INSERT INTO player VALUES (1, 150, NULL);
INSERT INTO player VALUES (2, 100, NULL);
INSERT INTO player VALUES (3, 250, NULL);
INSERT INTO player VALUES (4, 200, NULL);
INSERT INTO player VALUES (5, 175, NULL);

UPDATE   player
JOIN     (SELECT    p.playerID,
                    @curRank := @curRank + 1 AS rank
          FROM      player p
          JOIN      (SELECT @curRank := 0) r
          ORDER BY  p.points DESC
         ) ranks ON (ranks.playerID = player.playerID)
SET      player.rank = ranks.rank;

परिणाम:

SELECT * FROM player ORDER BY rank;

+----------+--------+------+
| playerID | points | rank |
+----------+--------+------+
|        3 |    250 |    1 |
|        4 |    200 |    2 |
|        5 |    175 |    3 |
|        1 |    150 |    4 |
|        2 |    100 |    5 |
+----------+--------+------+
5 rows in set (0.00 sec)

अपडेट करें: बस ध्यान दिया कि समान रैंक साझा करने के लिए आपको संबंधों की आवश्यकता होती है। यह थोड़ा मुश्किल है, लेकिन इसे और भी अधिक चरों के साथ हल किया जा सकता है:

UPDATE   player
JOIN     (SELECT    p.playerID,
                    IF(@lastPoint <> p.points, 
                       @curRank := @curRank + 1, 
                       @curRank)  AS rank,
                    @lastPoint := p.points
          FROM      player p
          JOIN      (SELECT @curRank := 0, @lastPoint := 0) r
          ORDER BY  p.points DESC
         ) ranks ON (ranks.playerID = player.playerID)
SET      player.rank = ranks.rank;

एक परीक्षण मामले के लिए, आइए 175 अंकों के साथ एक और खिलाड़ी जोड़ें:

INSERT INTO player VALUES (6, 175, NULL);

परिणाम:

SELECT * FROM player ORDER BY rank;

+----------+--------+------+
| playerID | points | rank |
+----------+--------+------+
|        3 |    250 |    1 |
|        4 |    200 |    2 |
|        5 |    175 |    3 |
|        6 |    175 |    3 |
|        1 |    150 |    4 |
|        2 |    100 |    5 |
+----------+--------+------+
6 rows in set (0.00 sec)

और अगर आपको टाई की स्थिति में किसी स्थान को छोड़ने के लिए रैंक की आवश्यकता है, तो आप एक और IF . जोड़ सकते हैं शर्त:

UPDATE   player
JOIN     (SELECT    p.playerID,
                    IF(@lastPoint <> p.points, 
                       @curRank := @curRank + 1, 
                       @curRank)  AS rank,
                    IF(@lastPoint = p.points, 
                       @curRank := @curRank + 1, 
                       @curRank),
                    @lastPoint := p.points
          FROM      player p
          JOIN      (SELECT @curRank := 0, @lastPoint := 0) r
          ORDER BY  p.points DESC
         ) ranks ON (ranks.playerID = player.playerID)
SET      player.rank = ranks.rank;

परिणाम:

SELECT * FROM player ORDER BY rank;

+----------+--------+------+
| playerID | points | rank |
+----------+--------+------+
|        3 |    250 |    1 |
|        4 |    200 |    2 |
|        5 |    175 |    3 |
|        6 |    175 |    3 |
|        1 |    150 |    5 |
|        2 |    100 |    6 |
+----------+--------+------+
6 rows in set (0.00 sec)

नोट:कृपया विचार करें कि मैं जिन प्रश्नों का सुझाव दे रहा हूं, उन्हें और सरल बनाया जा सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सबक्वेरी में दो "WHERE NOT IN" के साथ Laravel Eloquent

  2. कमांड लाइन का उपयोग करके mysql डेटाबेस में एकल तालिका कैसे आयात करें?

  3. सिद्धांत का उपयोग कर तालिका को कैसे छोटा करें?

  4. मैं एक MySQL डेटाबेस में संग्रहीत PHP को कैसे निष्पादित करूं?

  5. एक MySQL संग्रहीत प्रक्रिया में लूप के अंदर कथन का चयन करें