Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Permanent - zdjęcie

Permanent

Rejestracja: 11.07.2013
Aktualnie: Nieaktywny
Poza forum Ostatnio: 15.07.2013 20:04
-----

#554970 Pozycja gracza w top10

Napisane przez GwynBleidD w 13.07.2013 12:17

Obliczanie rankingu dla 45 tys. rekordów trochę musi potrwać. W tym przypadku jednak lepiej rozbić to na 2 zapytania. W jednym pobierz top 10 w tradycyjny sposób, a drugim zapytaniem samą pozycję gracza, ale i tak to trochę potrwa... Pomoże utworzenie indeksu na polu expa


  • +
  • -
  • 1


#554870 Pozycja gracza w top10

Napisane przez GwynBleidD w 13.07.2013 02:24

Dobra, jeszcze jedno podejście :P

 

SELECT
    l.nick AS `nick`,
    l.`exp` AS `exp`,
    COUNT(r.`exp`)+1 AS `rank`
FROM nazwa_tabeli AS l
    LEFT JOIN nazwa_tabeli AS r
    ON l.`exp`<r.`exp`
GROUP BY l.nick
ORDER BY `exp` DESC

 

Jeśli masz w tabeli co najmniej kolumny nick i exp, to to zapytanie MUSI zadziałać. Testowałem na szybko utworzonej tabeli i wszystko było ok. W stosunku do poprzedniego zapytania naprawiłem wyświetlanie 1 pozycji (wyświetlało jako 2, bo jeden mały błąd był) oraz ująłem w odwrócone apostrofy ostatnie wystąpienie słowa exp.

 

SELECT
    l.nick AS `nick`,
    l.`exp` AS `exp`,
    COUNT(r.`exp`)+1 AS `rank`
FROM nazwa_tabeli AS l
    LEFT JOIN nazwa_tabeli AS r
    ON l.`exp`<r.`exp`
GROUP BY l.nick
HAVING rank<=10 OR nick='NICK GRACZA'
ORDER BY `exp` DESC

Tutaj masz wersję, która po wstawieniu nicku w odpowiednie pole wyświetli CI top10 (jeśli na 10 pozycji jest remis, to poda wszystkie 10 pozycje) ORAZ jeśli w top10 nie ma zadanego gracza, zostanie również podany wraz z jego miejscem, gdy np miał 50 miejsce, zostanie wyświetlony. Wystarczywyciąć OR nick.... aż do końca linii i wyświetla jedynie top10 :)

 

I powtarzam jeszcze raz, to MUSI działać!!!


  • +
  • -
  • 1