En düşük en yüksek gelen sıralarken bağları Taşıma

2 Cevap

Ben küçük bir project.The toplamları database.I saklanır için bir sıralama yöneticisi yapmak için çalışıyorum kolayca max almak ve mysql kullanılarak min ve de kayıtları düzenleyebilirsiniz descending.The sorun tie.I ihtiyacı olduğunda geliyor şeklinde bir kravat göstermek için: 1,2,3,3,4,5,6,7,7,7,7, etc.The numaraları ties.I yukarıdaki ulaşma yollarını düşünüyordum gösterecektir tekrarladı ama daha fazla fikir ihtiyacı; maden uzun ve karmaşık görünüyor.

Herkes bağları yapmanın onun / fikir paylaşabilirsiniz.

2 Cevap

Eğer sadece SQL yanı yapamaz mıyız? Yinelenen rütbeleri ile kayıtları hala ancak beraberlik içinde sipariş tanımsız olacaktır, çıkış alacak.

SELECT id, rank FROM mytable ORDER BY rank ASC;

Ben soru, teşekkürler Matchu yanlış gibi ah, görünüyor. Bu hala nispeten basit bir SQL sorgusu ile elde edilebilir. Anahtar zaten geçti ayrı puanları saymak için bir alt sorgu kullanıyor.

SELECT id, score, (
  SELECT COUNT(DISTINCT score) + 1 
  FROM mytable 
  WHERE score < outerscore.score 
  ORDER BY score ASC
) AS rank
FROM mytable as outertable
ORDER BY score ASC;
$data = array(
  'A'=>19,'B'=>18,'C'=>17,'D'=>17,'E'=>16,'F'=>15
);

$rank = 0;
$lastScore = PHP_INT_MAX;
foreach( $data as $name=>$score ) {
  if ( $lastScore !== $score ) {
    $lastScore = $score;
    $rank += 1;
  }
  printf("%s %d (%d)\n", $name, $score, $rank);
}

baskılar

A 19 (1)
B 18 (2)
C 17 (3)
D 17 (3)
E 16 (4)
F 15 (5)