Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zaawansowane sortowanie tabel, Tabela ligowa
markonix
post
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Swego czasu udało mi się stworzyć zapytanie SQL, które bez PHP tworzyło mi ładną tabelę sezonu (tabela ligowa - piłka nożna) z punktami, strzelonymi bramkami itp.
Niestety posortowanie wg punktów nie zawsze zdaje zadanie bo przy remisie punktowych w grę zaczynają już wchodzić dość skomplikowane algorytmy.

Przykładowo przy remisie brane są pod uwagę punkty zdobyte w meczach między remisującymi drużynami. Na pewno już tego nie dam rady czystym SQL ogarnąć dlatego już zrobię to w PHP.
Jednak to też nie jest jakieś super łatwe bo zastanawiam się jak potem to i tak posortować.

Infantylnie by było dodać jako indeks liczbę punktów, a potem ułamkowo dodać liczbę tych punktów.

Te rozwiązanie pomijam więc przychodzą mi tylko dwie opcje:

Sortowanie po kolejnych atrybutach.

Drużyna A:
- punktów 10
- punktów między drużynami co mają 10 - 9
- inne atrybuty (nazwa itp).

Drużyna B
- punktów 10
- punktów między drużynami co mają 10 - 7
- inne atrybuty (nazwa itp).

I podobny pomysł tylko użyciu multiarray:

$table[liczba_punktow][liczba_punktow_miedzy_remisujacymi][kolejne_warunki_s
ortujace]

Sortuje najpierw po liczbie punktów, potem po drugiej liczbie, potem po bilansie bramkowym itp.

Jakieś sugestie i potem narzędzia aby to potem posortować bo tak wielu atrybutach/kluczach?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Z funkcji nigdy nie korzystałem ale jest dobrym punktem zaczepienia.

Generalnie robię na razie tak:

1. Generuje normalne wyniki tabeli.
2. Obracam pętle i sprawdzam czy są jakieś remisy punktowe.
3. Remisy punktowe przekazuje do funkcji podobnej jak w kroku pierwszym czyli zapytanie SQL które jednak liczy punkty tylko dla wskazanych drużyn i tylko punkty.
4. Punkty zdobyte w tej podgrupie przypisuje do obiektu np. points_2.

No i mamy tablicę z obiektami, którą trzeba posortować.

Jeżeli mamy wynik z bazy w tablicach to jest gotowiec tutaj:
http://php.net/manual/en/function.array-multisort.php#100534

Ja akurat mam to na obiektach ale nie musiałem powyższej edytować bo znalazłem analogiczną funkcję tutaj:
http://blog.amnuts.com/2011/04/08/sorting-...comment-page-1/

Nie zmienia to faktu, że generowanie tej tabeli mocno się komplikuje i generuje troszkę zapytań ale najwyżej się pomyśli o jakimś cache..

Na razie zrobiłem tylko jedno rozwiązanie remisu, bo w tych drugich punktach też może być remis wtedy liczy się co innego i tak jest aż 5! różnych sytuacji, a 6 (wg specyfikacji) to losowanie przez włodarzy (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował markonix 2.03.2015, 02:33:09
Go to the top of the page
+Quote Post

Posty w temacie


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: 30.12.2025 - 18:26