2012-07-06 34 views
5

Nói rằng tôi có một bảngmysql lĩnh vực loại giá trị thặng dư

name    rank 
----------------------- 
John    1 
Tit    3 
Bernard   4 

Rank 2 là mất tích, có thể đã bị xóa hoặc bất cứ điều gì. Tôi cần một truy vấn để tăng trường xếp hạng. Vì vậy, John sẽ là số 1, nhưng Tit bây giờ sẽ là số 2, và Bernard 3.

Có thể có bất cứ nơi nào lên đến 100 bậc, và một số thiếu. Miễn là xếp hạng nhỏ nhất được đặt lại về số 1, và tất cả những gì theo sau gia tăng, nó sẽ là tốt.

Bất kỳ ý tưởng nào?

Truy vấn cập nhật trường xếp hạng.

Trả lời

6

này sẽ cập nhật các lĩnh vực cấp bậc để nó increments không có lỗ:

SET @i := 0; 
UPDATE tbl SET rank = @i:[email protected]+1 ORDER BY rank; 
+0

nhờ tôi đã gần :) – user1022585

2

Bạn có thể làm điều đó mà không cần phải sử dụng các biến bên ngoài:

UPDATE tbl a 
INNER JOIN 
(
    SELECT a.name, a.rank, COUNT(*) AS newrank 
    FROM tbl a 
    INNER JOIN tbl b ON a.rank >= b.rank 
    GROUP BY a.rank 
) b ON a.name = b.name AND a.rank = b.rank 
SET a.rank = b.newrank 
Các vấn đề liên quan