MySQL: rütbe dönen, bir Winner SEÇİMİ

1 Cevap php

Daha önce ben this question, hangi temelde aldıkları puanlara göre, birçok kazananlar ile bir tabloda 10 kazananları listelemek için nasıl sordu sordu.

Bu yanıtlandı.

Şimdi tabloda verilen kazanan X için arama ve masa puan sipariş edildiğinde position o, ne olduğunu öğrenmek için arıyorum.

Örneğin, bu tablo:

     Winners:
NAME:____|__POINTS:
Winner1  |  1241
Winner2  |  1199
Sally    |  1000
Winner4  |  900
Winner5  |  889
Winner6  |  700
Winner7  |  667
Jacob    |  623
Winner9  |  622
Winner10 |  605
Winner11 |  600
Winner12 |  586
Thomas   |  455
Pamela   |  434
Winner15 |  411
Winner16 |  410

Bunlar benim yapmak istediğim için olası giriş ve çıkışlar vardır:

Query:  "Sally", "Winner12", "Pamela", "Jacob"
Output: 3        12          14        623

Bunu nasıl yapabilirim? Sadece MySQL deyimini kullanarak, mümkün mü? Ya da ben de PHP gerekiyor?

Bu benim istediğim şey türüdür:

WHEREIS FROM Winners WHERE Name='Sally' LIMIT 1

Fikirler?

Düzenleme - NOT: İki Kazananlar aynı Puanlar (bu olmaz bu basitlik aşkına varsayalım) olan durumla başa çıkmak zorunda değilsiniz.

1 Cevap

Ben bu size istediğiniz sonucu elde düşünüyorum. I düzgün hedeflenen kazanan bir başka galibi ile puan için bağlıdır davalarına unutmayın. (Aynı konumunuzu almak ikisi).

SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')

Edit:
I'd like to "plug" Ignacio Vazquez-Abrams' answer which, in several ways, is better than the above.
For example, it allows listing all (or several) winners and their current position.
Another advantage is that it allows expressing a more complicated condition to indicate that a given player is ahead of another (see below). Reading incrediman's comment to the effect that there will not be "ties" prompted me to look into this; the query can be slightly modified as follow to handle the situation when players have same number of points (such players would formerly have been given the same Position value, now the position value is further tied to their relative Start values).

SELECT w1.name, (
  SELECT COUNT(*)
  FROM winners AS w2
  WHERE (w2.points > w1.points) 
     OR (W2.points = W1.points AND W2.Start < W1.Start)  -- Extra cond. to avoid ties.
)+1 AS rank
FROM winners AS w1
-- WHERE W1.name = 'Sally'   -- optional where clause