Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pytanie dotyczące sortowania wyników MySQL ( ranking )
Forum PHP.pl > Forum > Bazy danych > MySQL
marcon
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
YaQzi
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ą.
marcon
Bardzo dziękuję za odpowiedź, chyba rzeczywiście najrozsądniej i najprościej będzie to zrobić za pomocą PHP.
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.