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

टाई के साथ सरल MySQL अपडेट रैंक

यहां एक वैकल्पिक समाधान है:रैंक को बिल्कुल भी स्टोर न करें! :-)

आप तुरंत उनकी गणना कर सकते हैं।

उदाहरण:

SELECT id, (@next_rank := IF(@score <> score, 1, 0)) nr, 
           (@score := score) score, (@r := IF(@next_rank = 1, @r + 1, @r)) rank 
FROM rank, (SELECT @r := 0) dummy1
ORDER BY score DESC;

परिणाम:

  +------+----+-------+------+
  | id   | nr | score | rank |
  +------+----+-------+------+
  |    2 |  1 |    23 |    1 |
  |    4 |  1 |    17 |    2 |
  |    1 |  0 |    17 |    2 |
  |    5 |  1 |    10 |    3 |
  |    3 |  1 |     2 |    4 |
  +------+----+-------+------+

nr यहाँ एक सहायक कॉलम है जो इंगित करता है कि हमें अगली रैंक प्रदान करनी चाहिए या नहीं।

आप इस क्वेरी को दूसरे select . में लपेट सकते हैं और उदाहरण के लिए पेजिंग करें।

SELECT id, score, rank 
FROM (SELECT id, (@next_rank := IF(@score <> score, 1, 0)) nr, 
           (@score := score) score, (@r := IF(@next_rank = 1, @r + 1, @r)) rank
      FROM rank, (SELECT @r := 0) dummy1
      ORDER BY score DESC) t
      WHERE rank > 1 and rank < 3;

परिणाम:

  +------+-------+------+
  | id   | score | rank |
  +------+-------+------+
  |    4 |    17 |    2 |
  |    1 |    17 |    2 |
  +------+-------+------+

सावधानी :अब से rank एक परिकलित स्तंभ है, आप इसे अनुक्रमित नहीं कर सकते हैं और कुशलतापूर्वक पृष्ठ को डेटासेट में दूर कर सकते हैं (अर्थात, "3000 से 3010 तक के रैंक वाले रिकॉर्ड का चयन करें")। लेकिन यह अभी भी "चुनिंदा शीर्ष एन रैंक" के लिए अच्छा है (बशर्ते कि आप संबंधित LIMIT एक प्रश्न पर)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL संग्रहीत प्रक्रिया में आईडी की सूची कैसे पास करें?

  2. क्या php क्रम से mysql क्रम से बेहतर है?

  3. MySQL शेरिंग दृष्टिकोण?

  4. कच्चे MySQLdb कर्सर के माध्यम से पंक्तियों की तुलना में ओआरएम 5-8x धीमी के माध्यम से SQLAlchemy ऑब्जेक्ट्स लोड क्यों कर रहा है?

  5. एक टेबल से चुनें और दूसरे में डालें