項
以下工作:
UPDATE names
JOIN (SELECT * FROM names ORDER BY placeRef, incidence DESC) AS p ON p.id = names.id,
(SELECT @curRank := 0, @nextRank := 0, @prevInc := 9999999999, @prevPlace := 0) AS v
SET
names.rank = IF( @prevPlace != p.placeRef, @curRank := 0, 0),
names.rank = IF( @prevPlace != p.placeRef, @nextRank := 0, 0),
names.rank = IF( @prevInc = p.incidence, @nextRank := @nextRank + 1, @curRank := @nextRank := @nextRank + 1),
names.rank = IF( @prevInc = p.incidence, @curRank := @curRank, @curRank := @nextRank),
names.incidence = @prevInc := names.incidence,
names.placeRef = @prevPlace := names.placeRef;
說明:
UPDATE names
1 - 設置表進行更新
JOIN (SELECT * FROM names ORDER BY placeRef, incidence DESC) AS p ON p.id = names.id,
2 - 這使得有結果的虛擬表排序的,所以該排名可以應用
(SELECT @curRank := 0, @nextRank := 0, @prevInc := 9999999999, @prevPlace := 0) AS v
3 - 這將一些變量將被用來告訴何時incrament並重置排名
names.rank = IF( @prevPlace != p.placeRef, @curRank := 0, 0),
4 - 這是當前等級重置爲0黑客攻擊時的MySQL迭代到一個新的地方
names.rank = IF( @prevPlace != p.placeRef, @nextRank := 0, 0),
5 - 這是下一個等級重置爲0黑客攻擊時的MySQL迭代到一個新的地方
names.rank = IF( @prevInc = p.incidence, @nextRank := @nextRank + 1, @curRank := @nextRank := @nextRank + 1),
6 - 這是一個更新下一個和真正水流黑客攻擊在當前發病率是一樣的前面發生
names.rank = IF( @prevInc = p.incidence, @curRank := @curRank, @curRank := @nextRank),
7 NT行列 - 設置職級相同,最後的排名時,其發病率是一樣的前面,或者如果它不是遞增等級」牛逼
names.incidence = @prevInc := names.incidence,
8 - 這是設置一個變量包含先前發生黑客攻擊,因此,我們可以告訴在未來itteration
names.placeRef = @prevPlace := names.placeRef;
9做的 - 這是一個黑客ŧ帽子設置一個變量來包含以前的地方,所以我們可以告訴下一步做什麼
您的SQL語句在哪裏? – Raptor 2014-12-19 02:35:03
花了一段時間對我進行註釋。 – 2014-12-19 02:44:53