Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapytanie MySQL budujące ranking
Forum PHP.pl > Forum > Przedszkole
northwest
Witam serdecznie,
Mam następującą tabelę:
  1. CREATE TABLE IF NOT EXISTS `baza_pkt` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `idusera` int(11) DEFAULT NULL,
  4. `pkt` int(11) DEFAULT '0',
  5. `datadodania` date NOT NULL,
  6. `rodzajpkt` int(11) NOT NULL DEFAULT '0',
  7. UNIQUE KEY `id_2` (`id`),
  8. KEY `gt_id` (`id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;



W tabeli znajdują się rekordy z punktami użytkowników.
Wpisów dla każdego usera są różne ilości (może być jeden, dwa... 10... 1000 itp).

Chciałbym zbudować ranking użytkowników (czyli zsumowane punkty dla każdego usera + posortowanie od największej do najmniejszej ilości pkt).

Ma ktoś może pomysł jak to zrobić?

Bardzo proszę o pomoc.

Próbowałem coś takiego:

  1. SELECT id, idusera, pkt, rodzajpkt, FIND_IN_SET( pkt, (
  2. SELECT GROUP_CONCAT( pkt
  3. ORDER BY pkt DESC )
  4. FROM cms_users_pkt )
  5. ) AS rank
  6. FROM cms_users_pkt
  7. ORDER BY rank ASC

Ale sortuje mi to po ilości punktów - bez uwzględnienia tego że parę userów może mieć po parę rekordów (nie sumuje ich)

Czy mógłbym prosić o pomoc?

Z góry dziękuje,
Northwest

Kshyhoo
A nie tak:
  1. SELECT id, idusera, pkt, SUM(pkt) AS lacznie_pkt
  2. FROM cms_users_pkt
  3. GROUP BY idusera

questionmark.gif
northwest
Działa, dziękuję smile.gif
Da się obliczyć jakoś średnie miejsce danego użytkownika na przestrzeni wszystkich miesięcy dostępnych w bazie (jest pole z datą w tabeli)? smile.gif
Kshyhoo
Chcesz policzyć ranking w poszczególnych miesiącach?
northwest
chce policzyć średnią pozycję usera w rankingu smile.gif

Cytat(Kshyhoo @ 2.02.2014, 21:44:06 ) *
A nie tak:
  1. SELECT id, idusera, pkt, SUM(pkt) AS lacznie_pkt
  2. FROM cms_users_pkt
  3. GROUP BY idusera

questionmark.gif




w tym zapytaniu brakuje jeszcze pozycji danego usera - którą zajmuje smile.gif
Kshyhoo
No przecież zrób sobie sortowanie a liczba porządkowa będzie miejscem w rankingu.
northwest
tzn myślisz o czymś takim:

  1. SELECT id, idusera, pkt, SUM(pkt) AS lacznie_pkt
  2. FROM cms_users_pkt ORDER BY id ASC
  3. GROUP BY idusera

questionmark.gifsmile.gif

Tylko to się nie sprawdzi w momencie gdy wybiorę sobie idusera = XX (nie pokaże mi który user jest konkretnie - nie wyświetlając wszystkiego sad.gif
Kshyhoo
Kolejność zapytań:
1. FROM (LewaTabela)
2. ON (warunek)
3. (typ łączenia) JOIN (PrawaTabela)
4. WHERE (warunek)
5. GROUP BY (lista)
6. WITH (CUBE | ROLLUP)
7. HAVING (warunek)
8. SELECT
9. DISTINCT
10. ORDER BY (lista)
11. TOP (lista)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.