![]() |
![]() |
--jymbox-- |
![]()
Post
#1
|
Goście ![]() |
Najlepiej wydaje mi sie ze opisze to na przykladzie:
tabela wynikow na Wielkiej Krokwi id nazwa metrow rok 1 Czesiek 125 2001 2 Wiesiek 132 2001 3 Stefek 140 2001 4 Czesiek 143.5 2002 5 Wiesiek 124 2002 6 Stefek 115 2002 7 Czesiek 129 2003 8 Wiesiek 137 2003 9 Stefek 120 2003 itd. i teraz tak... kolejonosc w danym roku to nie problem radze sobie ale zeby zrobic taki ranking wszechczasow na Wielkiej Krokwi to juz mi stwarza problem probowalem ze naprawde wielu rzeczy i distinct i group by i tabele pomocnicze i nigdy nie udalo mi sie otrzymac poprawnych danych np. dla tabeli powyzej dane powinny wygladac tak: miejsce id nazwa metrow rok 1 4 Czesiek 143.5 2002 2 3 Stefek 140 2001 3 8 Wiesiek 137 2003 tylko wlasnie o to mi chodzi zeby raz pokazywalo danego zawodnika i tylko z jego najlepszym wynikiem oczywiscie niestety mi nie udawalo sie wyciagnac tych danych tak zeby grupowalo z najepszym wynikiem tylko zawsze z najgorszym badz z pierwszym juz nie pamietam ponizej podam link do starego mojego tematu problem z zapytaniem mysql z gory dzieki za kazda pomoc |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Wszystko zależy od struktury tabel w bazie. Najprostszy, co nie znaczy od razu najlepszy, to posortować tabelę wyników najpierw po interesującej Cię informacji i pogrupować po innym kryterium. Tu jest właśnie problem, ponieważ ORDER BY jest wykonywane PO grupowaniu dopiero i nie można tej kolejności zamienić. Pomysłów na odejście tego problemu jest kilka. Najczęściej tworzysz podzapytanie, które ustawia rekordy we właściwym porządku i dopiero je grupujesz.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 22 Pomógł: 8 Dołączył: 28.12.2010 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Może zrób tak, powinno działać:
Tyle, że to podzapytanie jest skorelowane a zatem niezbyt wydajne. Ten post edytował binbash 15.03.2011, 09:41:03 |
|
|
--jymbox-- |
![]()
Post
#4
|
Goście ![]() |
dzieki
![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Jak wspomniał binbash... Jest to zapytanie skorelowane a więc niezbyt wydajne.
vs moje na szybko napisane:
binbash: 0.0016s moje: 0.0009s Problemem jest jednak co innego... Wielokrotne odwołania do obu zapytań (nieważne czy moja czy binbasha wersja) sprawią, że tak naprawdę różnica między nimi będzie niej ważna, gdyż kilkukrotne odwołanie sprawia, że oba schodzą z wynikami do około 0.0005-0.0007s i tutaj powinieneś poznać magiczny zwrot: cache'owanie wyników ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
--jymbox-- |
![]()
Post
#6
|
Goście ![]() |
neistety nie mam pojecia o co chodzi z tym cachowaniem wynikow cos tam czytam i poczytam dalej ale jak narazie nie kapuje zbytnio :/
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Chodzi o to, aby za każdym razem nie robić zapytania do bazy tylko skorzystać z systemu, który wynik przechowuje. Pomyśl... Jeśli coś zmienia się rzadko, to jest sens ciągle pytać o to samo, czy lepiej sobie zapisać to "na boku" i jedynie uaktualniać w przypadku gdyby coś się zmieniło? Tak działa właśnie cache. Samo cache'owanie potrafi mocno odciążyć bazę.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 03:31 |