Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pytanie dotyczące sortowania wyników MySQL ( ranking )
marcon
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 2.11.2009

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


Witam,

Jak w temacie, chciał bym wykonać ranking aczkolwiek kompletnie nie mam pomysłu na to jak zmodyfikować zapytanie. Posiadam w bazie danych tabelę a w niej pola: dyscyplina, zawodnik, punkty. Obenie ranking jest tworzony na podstawie pola punkty
  1. SELECT `dyscyplina`, `zawodnik`, `punkty` FROM `ranking` ORDER BY `punkty` DESC

Wszystko wygląda tak :

Kod
1. Koszykówka, XYZ, 12
2. Koszykówka, XYZ, 11
3. Siatkówka, XYZ, 10
4. Siatkówka, XYZ, 9
5. Piłka nożna, XYZ, 8
6. Piłka nożna, XYZ, 7
( ... )


Chciał bym natomiast wyświetlić dane tak:

Kod
1. Koszykówka, XYZ, 12 // pierwsza pozycja z dyscypliny "Koszykówka"
1. Piłka nożna, XYZ, 8 // pierwsza pozycja z dyscypliny "Piłka nożna"
1. Siatkówka, XYZ, 10 // pierwsza pozycja z dyscypliny "Siatkówka"
2. Koszykówka, XYZ, 11 // druga pozycja z dyscypliny "Koszykówka"
2. Piłka nożna, XYZ, 7 // druga pozycja z dyscypliny "Piłka nożna"
2. Siatkówka, XYZ, 9 // druga pozycja z dyscypliny "Siatkówka"
( ... )


Jakim zapytaniem MySQL osiągnę taki rezultat? Z góry bardzo dziękuję za pomoc.

Pozdrawiam,
Marcin

Ten post edytował marcon 14.07.2011, 11:32:40
Go to the top of the page
+Quote Post
YaQzi
post
Post #2





Grupa: Zarejestrowani
Postów: 94
Pomógł: 31
Dołączył: 12.10.2008
Skąd: WAT

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


Nie wiem czy mysql ma takie cuda jak wskaźniki w procedurach tak jak oracle ale nawet jeśli ma to sprawa wg mnie nie jest warta takiego zachodu... Przy obecnej strukturze tabeli nie da się tego prosto rozwiązać.
Możesz pokombinować coś w stylu:

  1. SELECT
  2. (
  3. SELECT (COUNT(*) + 1)
  4. FROM ranking
  5. WHERE dyscyplina = dysc
  6. AND punkty < pkt
  7. ) AS miejsce, dyscyplina AS dysc, zawodnik, punkty AS pkt
  8. FROM ranking R
  9. ORDER BY miejsce ASC, dyscyplina ASC/DESC


tylko co jeśli w danej dyscyplinie będzie kilku zawodników z taką samą liczbą punktów?

Ja bym to przerzucił na skrypt. Pobierz każdą dyscyplinę wg punktów do osobnej tablicy i przy wyświetlaniu iteruj wszystkie na raz.
Jak chcesz się uprzeć na bazę danych to analogicznie trzeba by to zrobić procedurą.
Go to the top of the page
+Quote Post
marcon
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 2.11.2009

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


Bardzo dziękuję za odpowiedź, chyba rzeczywiście najrozsądniej i najprościej będzie to zrobić za pomocą PHP.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.12.2025 - 23:41