![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam mam problem ze zrobieniem zapytania ktore pobiera najmniejszy wynik dla danego usera w danym obiekcie (wynik) oraz najmniejszy wynik w ogole w danym obiekcie (mini_wynik). Problem polega na tym ze w bazie wyniki nie mam kolumny obiekt_id a jedynie wydarzenie_id ktore sa polaczone z obiektami w osobnej tabeli. (wiele wydarzen moze byc rozgrywanych na danym obiekcie) Zapytanie ktore mam dziala poprawnie ale mini_wynik pobierane jest dla danego wydarzenia a nie obiektu czyli jesli najmniejszy wynik usera zostal zrobiony w wydarzeniu z 2008 roku to mini_wynik wskaze najmniejszy wynik dla tego wydarzenia z 2008 roku mimo ze na tym obiekcie byly nizsze wyniki np w wydarzeniu z 2010 roku. Probowalem zmienic w2.wydarzenie_id = w1.wydarzenie_id na w2.obiekt_id = w1.obiekt_id ale to nie dziala najprawdopodobniej dlatego ze nie ma w bazie wyniki takiej kolumny jak obiekt. Czy ktos moze pomoc mi poprawic te zapytanie?
tabela wyniki zawiera kolumny wynik, sesja, wydarzenie tabela wydarzenia zawiera wydarzenie, obiekt Kod Select obiekt_name, MIN(w1.wynik) AS wynik,
(SELECT MIN(w2.wynik) FROM " . DB_WYNIKI . " w2 WHERE w2.sesja_id IN (1,2,3,4) AND w2.wydarzenie_id = w1.wydarzenie_id) AS mini_wynik FROM " . DB_WYNIKI . " w1 LEFT JOIN " . DB_WYDARZENIA . " USING(wydarzenie_id) LEFT JOIN " . DB_OBIEKTY . " USING(obiekt_id) WHERE sesja_id IN (1,2,3,4) AND user_id = '" . $_GET['user_id'] . "' GROUP BY obiekt_name Ten post edytował arfer 22.02.2013, 23:03:59 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 285 Pomógł: 37 Dołączył: 18.12.2007 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Możesz podać strukturę tabelek i wyniku który byś chciał?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
W moim 1 poscie wkradl sie blad w nazewnictwie tabel juz go poprawilem.
Chcialbym zeby mini_wynik byl pobierany dla takiego samego obiektu jak wynik (teraz jest pobierane dla tego samego wydarzenia.) W ogolnym rozrachunku wyswietlane byloby cos takiego. OBIEKT - MIN WYNIK USERA - MIN WYNIK DLA TEGO OBIEKTU Obiekt 1 - 128 - 117 Obiekt 2 - 154 - 150 Obiekt 3 - 122 - 121 itd.. Na obiekcie 1 byly trzy wydarzenia 2008,2009 i 2010. Dany user swoj najmniejszy wynik 128 zrobil w 2008. Aktualne moje zapytanie pobiera najmniejszy wynik w tym wydarzeniu 2008 czyli 125 ale w wydarzeniu 2010 byly znacznie nizsze wyniki - najnizszy 117. I chcialbym tak zmodyfikowac te zapytanie zeby pobieralo najmniejszy wynik dla tego obiektu czyli 117 a nie wydarzeniu w ktorym dany user zrobil najnizszy wynik. Ten post edytował arfer 22.02.2013, 23:08:33 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 285 Pomógł: 37 Dołączył: 18.12.2007 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Dalej nic nie rozumiem
![]() Przetłumacz: Obiekt 1 - 128 - 117 Obiekt 2 - 154 - 150 Obiekt 3 - 122 - 121 na najmniejszy wynik dla danego usera w danym obiekcie (wynik) oraz najmniejszy wynik w ogole w danym obiekcie (mini_wynik). a najlepiej byłoby jakbyś poświęcił chwilę i rozpisał wynik:id_wynik,id_obiekt,id_user obiekt: ... czy jak kolwiek to wygląda przynajmniej w zakresie kolumn potrzebnych do złączenia, wyświetlenia lub agragacji. Edit po raz drugi: Rozumiem co chcesz poprawić ale nie rozumiem co wycinasz id_sesji, nie rozumiem idei która przyświecała Ci przy LEFT JOIN, nie rozumiem co w MYSQL-u oznacza USING przy LEFT JOINIE, dlatego jakbyś wrzucił struktury byłoby lepiej, ale strzleam coś jak:
Chyba coś takiego, chociaż kiepsko się pisze nie mając struktury tabel ![]() P.S. jak wcisnąłem podgląd postu to się okazało że jednak napisałeś ![]() Ten post edytował netmare 22.02.2013, 23:48:22 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
No dokladnie tak bo w tej tabeli sa wyniki wielu userow a te zapytanie ma byc czescia stron profilowych userow. Wiec jak user wejdzie na swoja strone to pierwszy wynik bedzie jego najmniejszym wynikiem na danym obiekcie a drugi wynik bedzie w ogole najmniejszym wynikiem jaki komukolwiek udalo sie osiagnac. (np jakiemus innemu userowi)
TABELA WYNIKI user_id - wynik - wydarzenie_id 6 - 150 - 1 7 - 154 - 1 8 - 148 - 1 7 - 128 - 2 9 - 132 - 2 10 - 136 - 2 6 - 188 - 3 7 - 198 - 3 10 - 182 - 3 TABELA WYDARZENIA wydarzenie_id - obiekt_id 1 - 1 2 - 1 3 - 2 4 - 2 5 - 2 6 - 2 7 - 3 8 - 3 Mam nastepujace tabele WYNIKI uder_id, wynik, wydarzenie_id WYDARZENIA Wydarzenie_id, obiekt_id Jak zmodyfikowac te zapytanie aby mini_wynik pobieral najmniejszy wyniki z bazy dla takiego samego obiektu jak wynik (aktualnie pobiera najmniejszy wynik dla takiego samego wydarzenia.)
Ten post edytował arfer 22.02.2013, 23:19:47 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 11:12 |