![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam tabelę o takiej strukturze
id_user glos_plus (default 0 każdy głos +1) glos_minus (default 0 każdy głos +1) grupa Każdy użytkownik to osobny rekord (każdy użytkownik posiada rekord) Potrzebuję zrobić ranking użytkowników ale nie wiem jak logicznie powinno wyglądać zapytanie które sprawdza użytkownika i porównuję go do innych. Dodatkowo mamy trzy grupy użytkowników i każda ma swój ranking więc to kolejny warunek. Proszę o pomoc |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 3 Dołączył: 28.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
W SQL:
Wykorzystaj ORDER BY na kolumnach glos_plus lub glos_minus by posortować wyniki wg. największych/najmniejszych wartości. Wykorzystaj WHERE na kolumnie grupa by uzyskać wynik tylko dla wybranej grupy. Wykorzystaj LIMIT gdy chcesz ograniczyć wynik do określonej liczby użytkowników. Przykładowy kod który wyświetli 3 użytkowników z największą ilością głosów na plus z grupy "WybranaGrupa" Kod SELECT * FROM `Tabela` WHERE `Grupa`='WybranaGrupa' ORDER BY `glos_plus` DESC LIMIT 3
Ten post edytował kazymjir 11.04.2012, 22:44:50 -------------------- Zobacz mój blog o tematyce szeroko pojętego web developingu: http://kazymjir.com/
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki ale przestawione rozwiązanie jest niepełne. Najbardziej mi zależy na tym aby u każdego użytkownika był nr jaki zajmuje on w rankingu
Wrzucam to w funkcję zlicza rekordy zlicza sumę rekordów i teraz jak ogarnąć które miejsce w tym zajmuję dany użytkownik |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 12 Dołączył: 7.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Zliczamy ile osób ma więcej punktów od danego użytkownika, zwiększamy tą liczbę o jeden i mamy pozycję w rankingu
![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ja to zrobiłem tak gdyż muszę odwoływać się do wyniku wiele razy.
Czy jest w miarę optymalne? zmienna $jestem przetrzymuję grupę w której jest dany użytkownik
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 12 Dołączył: 7.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jak rozumiem chcesz wyświetlić po koleji wszystkich użytkowników rankingu w tabelce? A nie możesz w tej tabelce gdzie wyświetlasz miejsca w rankingu wpisywać je na bierząco ? tzn. w pętli przechodzącej po wszystkich wynikach, jeśli aktualny wyświetlany użytkownik ma mniej punktów niż poprzedni(zapamiętujemy wynik na końcu każdego cyklu pętli) to $pozycja += 1, jeśli ma tyle samo to są oni egzekwo i nie zmieniamy pozycji. Wtedy zaoszczędzamy trochę wydajności i jedno zapytanie MySQL mniej. Chyba że masz inny cel do zrealizowania niż sama lista.
Ten post edytował sebastian.rozmus 12.04.2012, 01:21:34 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie w tabelce
Lista znajomych jak np Nk zawiera użytkowników różnych grup a każda ma swoje notowania Więc w liście użytkowników jest taka lista jaką stworzy sobie użytkownik poprzez zaproszenia |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 12 Dołączył: 7.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
To w takim razie zauważ, że używasz tak naprawdę bardzo małej ilości danych spośród tych, które pobierasz w tym zapytaniu. Optymalniej byłoby tak jak mówiłem zliczyć użytkowników, którzy mają więcej punktów, niż dany user i zwiększyć wynik o 1. Jeśli danych będzie sporo to przydałoby się to jakoś sensownie cachować.
Ten post edytował sebastian.rozmus 12.04.2012, 01:38:26 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 12:03 |