![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 16.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pewną tabelę zawodników, która zawiera m. in. dwie kolumny określające siłę zawodnika: `sila_typ` i `sila_wart` oraz kolumnę określającą status: `status`. Pole `sila_typ` może przyjmować wartości: 'dan' lub 'kyu', `sila_wart` to po prostu jakaś liczba, a `status` może być 'active', bądź 'inactive'. Kolejność sił przedstawia się następująco (od najsilniejszego do najsłabszego): 9dan, 8dan, ... 1dan, 1kyu, 2kyu, ... 30 kyu. I teraz mój problem: Chciałbym wybrane rekordy z bazy posortować w następujący sposób: - najpierw względem statusu (na początku 'active', później 'inactive' - to oczywiście banalne) - następnie wg siły (od najsilniejszego do najsłabszego - i tu pojawia się problem, ponieważ kolejność wartości sił jest różna dla 'dan' i 'kyu') Czy jest to w ogóle wykonalne przy pomocy jednego zapytania SQL (bez użycia unii)? Z góry dziękuję za wszelkie sugestie. -------------------- Pozdrawiam.
BYKOM-STOP! |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 332 Pomógł: 6 Dołączył: 13.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ja bym próbował przypisać przed watrości bazy numery okerslajace poziom. Np. 1.9dan, 2.8dan, 3.7dan, 4.6dan, 5.5dan, 6.4dan, 7.3dan, 8.2dan, 9.1dan, 10.1kyu, 11.2kyu itd...
Tak widzę najprostrze rozwązanie. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 16.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam ponownie,
Rozważałem podobne rozwiązanie, ale po pierwsze wprowadzałoby ono niepotrzebną redundancję do bazy, po drugie wymuszałoby dodatkowe przetwarzanie danych przed samym dodaniem (obecnie jednak muszą one być przetwarzane zaraz po wyciągnięciu). Oczywiście jest to pewien zysk, gdyż częściej dane są pobierane, niż umieszczane w bazie (przynajmniej w tym konkretnym przypadku). W zasadzie to już zaimplementowałem odpowiednie mechanizmy sortowania po odebraniu danych z bazy (w samej aplikacji - php), ale właśnie wymyśliłem pewien sposób (w sumie dość banalny chyba), aby zrobić to jednak w SQL'u. Tym samym, pomyślałem też, że się nim podzielę. ![]() Oto moje rozwiązanie:
Cały trick polega na zmianie znaku sił danowców (lub graczy kyu, do wyboru), a pozostałych przepisaniu normalnie. Ustawiamy to jako nowe pole i po nim dokonujemy sortowania. Nie wiem na ile wpływa to na wydajność całego zapytania (moja tabela nie zawiera zbyt wielu rekordów), ale z pewnością działa. -------------------- Pozdrawiam.
BYKOM-STOP! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 09:14 |