MySQL kullanarak nasıl belirli bir satır sorgu sonucu rütbesi seçerim?

3 Cevap php

Ben çeşitli şeyler çalışırken bugün oldukça zaman harcadım, ama bunların hiçbiri çalışmıyor gibi görünüyor. Benim durum İşte, ben özellikle kriteri satırdan bu kimliği dayalı bir satır rütbe seçmek mümkün olmak istiyorum

Örneğin, eğer benim sorgu gibi bir şeydir:

SELECT id, name FROM people ORDER BY name ASC

sonuçlar gibi:

id   name
3    Andrew
1    Bob
5    Joe
4    John
2    Steve

Ben tüm satırları dönen ve ben (PHP) istediğiniz birini elde edene kadar onları atmak olmadan döngü (o sonuçlarında biter ne satır) rütbe almak istiyorum.

Bu durumda - 5 - (değil, onun id, ancak yukarıdaki sorguda isminin 'rütbe') Örneğin, ben döndürür böylece 'Steve' ve 'rütbe' seçmek istiyorum.

Benzer şekilde, ben 1 kimliği ne varsa satır rütbesine seçebilmek istiyorum. Bu Örneğin, ben bir kimlik orada ne sonuç satır içinde, çünkü (bir 2 'rütbe' dönmek istiyorum 1) ve başka bir şey.

Ben büyük tablolar için gerçekten yavaş sorguları olan ya da geçici tablolar ve kullanıcı değişkenleri (GERÇEKTEN isterim eski önlemek için, ikincisi her türlü oluşturmak zorunda ya ... Ben farklı sonuçlar olabilir kadar Google'd ettik I) Ben yaşayabilirim sanırım.

Herhangi bir yardım veya fikir büyük mutluluk duyacağız.

3 Cevap

dan artfulsoftware,

SELECT p1.id, p1.name, COUNT( p2.name ) AS Rank
    FROM people p1
    JOIN people p2 
    ON p1.name < p2.name
    OR (
         p1.name = p2.name
         AND p1.id = p2.id
    )
GROUP BY p1.id, p1.name
ORDER BY p1.name DESC , p1.id DESC
LIMIT 4,1

Bu böyle bir şey?

SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
      FROM people
      ORDER BY name ASC)
WHERE Row = @SomeRowNumber

Eğer kimliği ile gitmek istiyorsanız, sadece burada fıkra değiştirebilir.

Bu deneyin:

SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC