Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]mysql sortowanie wg liczby pogrupowanych rekordów
neo1986kk
post
Post #1





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


Witam, chciałbym uzyskać kolejność wg liczby wyników zapytania dokladnie chodzi mi o liczbę głosów, czyli:

id na_kogo
1 kinia
2 kinia
3 kinia
4 lisa
5 kinia
6 lisa
7 edek
8 kinia
9 edek
10 lisa

chcialbym uzyskac cos takiego:

pierwsza kinia - 5 glosów
druga lisa - 3 głosy
trzeci edek 2 głosy


myśle nad tym w ten sposób żeby wybrac rekordy z bazy i je pogrupować, ale wczesniej muszę chyba użyć 'Count' tylko nie wiem czy to dobre myślenie i szczerze mowiąc jak się tak na prawdę za to zabrać, pomożecie?
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. SELECT *, count(id) AS ile FROM tabela GROUP BY na_kogo ORDER BY ile DESC


--------------------
Go to the top of the page
+Quote Post
neo1986kk
post
Post #3





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


a jak z tego wyciągnąć ilość głosów?

albo jeszcze inaczej, dla konkretnego usera
czyli np

dla kinia będzie

  1. SELECT *, count(id) AS ile FROM tabela WHERE na_kogo='kinia' GROUP BY na_kogo ORDER BY ile DESC


i tera potrzebuje z tego wyciągnąć

Zajmujesz x miejce
Masz y glosow
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wykonaj to zapytanie o będziesz widział.


--------------------
Go to the top of the page
+Quote Post
neo1986kk
post
Post #5





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


ale z tego zapytania chyba nie wyciągnę miejsca na ktorym sie znajduje dana osoba, musze zrobić drugie zapytanie gdzie pogrupuje wszystkie osoby i posortuje po ilosci glosow i do tego sprawdze ktory wiersz to ta osoba, hmm w ogole da sie sprawdzic na ktroej pozycji znajduje sie taka osoba? jesli dobrze myślę to znów bede musial dać coś AS id i z tego zebrać?

Edit nie no cos pokopałem...

pobieram liste wszystkich
i count(id) as ile
teraz grupuje po ile
i mam pokolei miejsca

aha no i sie zatrzymalem przy tym zeby sprawdzić ktore miejsce nalezy do ktorej osoby

Ten post edytował neo1986kk 14.03.2011, 20:52:56
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Najlepiej raz na jakiś czas (albo w momencie zagłosowania) przeliczyć liczbę głosów i zapisać ją w oddzielnej tabeli. Najbardziej efektywne rozwiązanie.


--------------------
Go to the top of the page
+Quote Post
neo1986kk
post
Post #7





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


no tak ale z tabeli

id na_kogo ilosc_glosow
1 kinia 20
2 edek 15
3 lisia 10

wyciągne żę np dla edek jest to 2 miejsce?
Go to the top of the page
+Quote Post
wookieb
post
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Na forum i w internecie było wielokrotnie mówione o skryptach rankingów, więc nie będę powtarzać wszystkiego.
Jedyne co musisz stworzyć to tabelę o takiej strukturze
  1. miejsce | osoba | liczba_glosow

Klucz główny składa się z kolumn(miejsce, osoba)
Przy każdym dodaniu głosu należy zadbać o aktualność tabeli.
Jeżeli jest to jeden głos to oczywiste że możesz zrobić to sprytnie (sprawdzić czy to zmienia sytuacje na liście wyników, jak tak to odświeżasz tylko skorelowane rekordy)
Jeżeli przeliczasz raz na jakiś czas to załadowanie danych do tabeli będzie ostatecznością
  1. TRUNCATE TABLE ranking_wynikow;
  2. INSERT INTO ranking_wynikow (osoba, liczba_glosow) SELECT na_kogo, count(id) AS ile FROM tabela GROUP BY na_kogo ORDER BY ile DESC
Powód edycji: [wookieb]:


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 19:40