Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[PHP][MYSQL]Średnie spalanie na podstawie danych

Adalberd 11 Lut 2012 15:17 1625 8
  • #1 11 Lut 2012 15:17
    Adalberd
    Poziom 13  

    Mam problem z pomysłem na wyliczenie średniego spalania z danych zawartych w tabelach mysql:

    Tabela 1 (zbiór pojazdów)
    |id|Marka|Model|Numer_rej|Przebieg

    Tabela 2 (rejestrowanie przejazdów)
    |id|Data|Kierowca|Pojazd|Start|Koniec|Km|Cel|id_pojazd |id_kierowca


    Tabela 3 (rejestrowanie tankowań)
    |id|id_pojazd|Ilosc_paliwa|Stan_licznika|data_tankowania

    W tabeli 1 mam zbiór pojazdów to jest jasne,
    w tabeli2 poprzez formularze w php rejestruje przejazdy kierowców danym pojazdem,
    jeżeli przejazd zostanie dodany automatem w tabeli1 zwiększa się Przebieg dla danego pojazdu o długość trasy (w kilometrach)
    W tabeli 3 rejestruje tankowania, datę tankowania, ilość paliwa, dla danego pojazdu oraz stan licznika w momencie tankowania

    Teraz przy wykorzystaniu php i mysql chciał bym na podstawie tych danych przedstawiać średnie spalanie dla danego auta. Brakuje mi pomysłu jak to zacząć.
    Nie chodzi mi o gotowy kod tylko pomysł/schemat, który zakoduje.

    0 8
  • #2 11 Lut 2012 16:49
    marcinj12
    Poziom 40  

    Dla każdego pojazdu z tabeli 1 wybrać sumę zatankowanego paliwa z tabeli 3 i podzielić to przez sumę przejechanych kilometrów z tabeli 2. Jedno zapytanie SQL z dwoma lewostronnymi złączeniami (LEFT JOIN) po id_pojazdu.

    0
  • #3 11 Lut 2012 17:26
    Dżyszla
    Poziom 42  

    A czy stan licznika pokrywa się z km z przejazdów? Bo jak nie to raczej te dane byłby niewystarczające. Jeśli jednak tak, to można jak kolega zaproponował, a więc

    Kod: mysql
    Zaloguj się, aby zobaczyć kod
    (zwróć uwagę na ostatni warunek złączenia - nie da się wyliczyć spalania po ostatnim tankowaniu ;)

    0
  • #4 11 Lut 2012 22:54
    walek33
    Poziom 28  

    Moim skromnym zdaniem do wyliczenia spalania wystarczająca jest tabela 3. Grupując samochód po id_pojazd z ograniczeniem dat tankowania przy pomocy between, sumując tankowania otrzymamy zużycie paliwa przez każde auto w zadanym okresie. Znajdując różnicę stanu licznika z max(data tankowania) - min(data tankowania) mamy przejechane kilometry przez które dzielimy sumę zużytego paliwa (o współczynniku 100 nie wspominam). Dla czytelniejszego widoczku można dołączyć tylko numer rejestracyjny z tabeli 1 (choć niekoniecznie). Potraktowałem to bardzo opisowo z prozaicznego powodu. W tej chwili nie mam możliwości dopadnięcia się do SQL-a.

    0
  • #5 12 Lut 2012 09:14
    Dżyszla
    Poziom 42  

    Walek - nie do końca. Otóż gdy warunki ograniczą Cię do tylko jednego tankowania, to MAX-MIN da wartość = 0. Nawet gdyby wziąć dwa sąsiednie tankowania, to MAX-MIN(stan_licznika) da ilość przejechanych km pomiędzy tankowaniami, ale suma z ilości litrów będzie dotyczyła obu, więc wynik będzie niepoprawny. To by zmuszało to pobrania nie MIN z analizowanego zakresu, lecz o jeden mniej. A to już wymaga powtórnego odwołania się do tej tabeli. Wydajnościowo wyjdzie na to samo podejrzewam. Aczkolwiek masz rację, że tabela 2 może być pominięta i wystarcza tylko 3. Ale nie jednokrotnie.

    0
  • #6 12 Lut 2012 12:29
    walek33
    Poziom 28  

    Zgadzam się z Tobą w 100%. Mój błąd.

    Cytat:
    To by zmuszało to pobrania nie MIN z analizowanego zakresu, lecz o jeden mniej...

    Lub odjęcie ilości tankowanej z MIN.

    0
  • #7 01 Kwi 2012 12:43
    Adalberd
    Poziom 13  

    Chętnie zlecę komuś napisanie go skryptu za wynagrodzeniem. Na podstawie gotowych tabelek. Dochodzi mała różnica, że w osobnych kolumnach zapisywane są tankowane litry oleju ON i benzyny PB.
    ino na pw

    lub gg 8008010

    0
  • #9 01 Kwi 2012 16:17
    Adalberd
    Poziom 13  

    SQL + php do prezentacji wyniku.

    0