Bir tablodaki satırları sıralamak ve satır konumlarını almak nasıl?

2 Cevap php

Aşağıdaki tablo yapısını düşünün:

id    name     rank    position
-------------------------------
1     Steve    5        0
2     David    3        0 
3     Helen    9        0 
4     Mark    15        0

I rank kolonu bu satırları oranı ve gerçek zamanlı position alanında her satırın "pozisyonunu" saklamak için hızlı bir algoritma gerekir.

Şimdi acımasız bir çözüm var:

SELECT * FROM table ORDER BY rank DESC

Ve sonra bir döngü sonucunu almak ve pozisyon sütunu doldurarak her satırı güncelleştirmek. Ama binlerce girdileri ne olurdu varsa? Ben nasıl optimize edebilirsiniz?

2 Cevap

Ben bir kaç gün önce MySQL özgü çok benzer bir soruyu yanıtladı:

http://stackoverflow.com/questions/2067995/automate-mysql-fields-like-excel

Hüner veritabanındaki sütun saklamak için ancak sonuçlar almak zaman dinamik olarak hesaplamak mümkün değildir. Alternatif güncellemek veya silmek sütuna bir ekleme yapmak her zaman güncellemek için tetikler kullanabilirsiniz.

Birini seçin:

WITH t AS
(
SELECT 
  ROW_NUMBER() OVER (ORDER BY rank) as RowNum
  ,RANK() OVER (ORDER BY rank) as RankNum
  ,DENSE_RANK() OVER (ORDER BY rank) as DenseRankNum
  , * 
FROM table
)
UPDATE t set position = RankNum
--UPDATE t set position = RowNum
--UPDATE t set position = DenseRankNum
;