![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam takie oto zapytanie do bazy danych ktore zwraca mi najmniejsza wartosc dla danego parametru (wyscig_name) i okreslonego uzytkownika. Wszystko dziala prawidlowo do czasu gdy chce dodac najmniejsza wartosc danego parametru bez podzialu na uzytkownikow (pogrubione). Problem jest taki ze zwraca mi 1 najmniejszy wynik w bazie i powtarza go na wszystkich parametrach. Jesli wyciagne go z nawiasu i dodam do reszty select to dziala ale podaje wyniki tylko wybranego kierowcy (where) a chce aby obok jego wynikow byly najmniejsze wyniki ze wszystkich kierowcow w bazie. Czy ktos wiec jak to zapisac?
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 22 Dołączył: 1.06.2009 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Próbowałeś zapisać użytkowników jako LEFT JOIN ?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jaki mialoby to sens? Ja nie musze wyciagac zadnych informacji z tabeli kierowcy tylko z tabeli wyniki. Zrobilem skrypt ktory porownuje wartosci poszczegolnych kierowcow z najmniejszymi wartosciami w ogole. W bazie wyniki podane sa tylko id danego kierowcow po czym lacze go z konkretna osoba.
Chodzi mi o wyciagniecie minimalnej wartosci z bazy danych i teraz uwaga dla wybranego kierowcy i dla wszystkich kierowcow. Dopiero raczkuje w php i nie wiem jak zapisac drugie select min(wynik) tak aby ominac where dla kierowca_id ktore obowiazuje dla wszystkich pozostalych wartosci. Zapisalem to w nawiasie ale wtedy znajduje tylko jeden najmniejszy wynik a ja zrobilem tabele w ktorej pokazywane sa wyniki kazdego wyscigu. Zobrazuje to : TAK CHCE ABY WYGLADALO Wyscig 1 - minimalna wartosc kierowcy dla tego wyscigu* - minimalna wartosc w ogole dla tego wyscigu (np 2)** Wyscig 2 - minimalna wartosc kierowcy dla tego wyscigu* - minimalna wartosc w ogole dla tego wyscigu (np 1)** Wyscig 3 - minimalna wartosc kierowcy dla tego wyscigu* - minimalna wartosc w ogole dla tego wyscigu (np 3)** itd. * MIN(wynik) WHERE sesja_id IN (1,2,3,4) AND kierowca_id='".$_GET['kierowca_id']."' ** MIN(wynik) WHERE sesja_id IN (1,2,3,4) TAK WYGLADA Z OBECNYM KODEM Wyscig 1 - minimalna wartosc kierowcy dla tego wyscigu - minimalna wartosc w ogole ze wszystkich wyscigow (1) Wyscig 2 - minimalna wartosc kierowcy dla tego wyscigu - minimalna wartosc w ogole ze wszystkich wyscigow (1) Wyscig 3 - minimalna wartosc kierowcy dla tego wyscigu - minimalna wartosc w ogole ze wszystkich wyscigow (1) itd. Czy ktos mnie rozumie? (IMG:style_emoticons/default/tongue.gif) Ten post edytował arfer 30.04.2012, 13:39:19 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
W podzapytaniu brakuje warunku, który określałby o jaki wyścig chodzi. Ciężko to zapytanie w ogóle pojąć bez informacji odnośnie struktury tabel i relacji, ale możliwe, że chodziłoby o coś takiego:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 22 Dołączył: 1.06.2009 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Pisząc odpowiedź chodziło mi o to, że LEFT JOIN wybiera rekordy jeśli warunek jest spełniony. Jeśli warunek nie istnieje to takich rekordów nie doklei.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Pisząc odpowiedź chodziło mi o to, że LEFT JOIN wybiera rekordy jeśli warunek jest spełniony. Jeśli warunek nie istnieje to takich rekordów nie doklei. Nie w tym przypadku kolego. Tutaj złączenia są wykonywane najpierw, a warunek w klauzuli WHERE służy do wyselekcjonowania odpowiednich rekordów z już połączonych tabel. Warunek w klauzuli WHERE nie jest tutaj warunkiem złączenia tabel. Ten post edytował mortus 30.04.2012, 14:12:17 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jesli zapisze w Select w1.zespol_name to zwroci mi brak takiej kolumny w tabeli:
Unknown column 'w1.zespol_name' in 'field list' |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Tak. Teraz moj kod wyglada tak:
Wiem w czym tkwi problem nie wiem jak go rozwiazac. Wszystkie wartosci w select sa ze soba powiazane dlatego robiac tabele z wyswietlanymi kolejno wynikami while ($data = dbarray($result)) wyswietla mi najnizsza wartosc danego kierowcy dla kazdego wyscigu a 2 min wynik odseparowalem w nawiasie i odczytuje to jako wybierz najnizsza wartosc w ogole a nie najnizsza wartosc dla danego wyscigu. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Wiem w czym tkwi problem nie wiem jak go rozwiazac. Wszystkie wartosci w select sa ze soba powiazane dlatego robiac tabele z wyswietlanymi kolejno wynikami while ($data = dbarray($result)) wyswietla mi najnizsza wartosc danego kierowcy dla kazdego wyscigu a 2 min wynik odseparowalem w nawiasie i odczytuje to jako wybierz najnizsza wartosc w ogole a nie najnizsza wartosc dla danego wyscigu. No przecież o tym pisałem w pierwszej odpowiedzi. Jak wyglądają tabele w bazie danych (przynajmniej tabela DB_WYNIKI, chociaż struktura pozostałych tabel również mogłaby się przydać). Funkcja dbarray() to Twoja własna funkcja? Jak ona wygląda? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Tak wyglada caly moj kod :
Funkcja straty jest niewazna wiec jej nie kopiowalem. Skrypt pobiera rekordy z bazy wyniki gdzie sa kolumny sesja_id (wezmie tylke te gdzie bedzie 1,2,3,4) zespol_id i wyscig_id (przeksztalci na nazwy w left join using...) wynik i kierowca_id. Wszystko dziala przy kodzie zamieszczonym w 1 poscie z tym ze najlepszy wynik dla wszystkich kierowcow zwraca ciagle ta sama najnizsza wartosc z calej tabeli nie zwracajac uwage na odwolanie do wyscigow. Jak zrobic by pokazywalo najnizsza wartosc dla wszystkich kierowcow poszczegolnych wyscigow. Ten post edytował arfer 30.04.2012, 15:02:16 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Cały czas rozchodziło się o strukturę tabeli wyniki, której nam nigdzie nie podałeś. Teraz przynajmniej opis jest dokładniejszy i można coś kombinować:
Powinno zadziałać, jeśli tylko kolumny zespol_name i wyscig_name są unikalne w "obrębie" wszystkich tabel, tzn. nie powtarzają się w dwóch tabelach. Ten post edytował mortus 30.04.2012, 15:20:07 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 23.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Bingo Mortus (IMG:style_emoticons/default/smile.gif) Dziala. Wielkie dzieki (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 00:54 |