Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

Adalberd 11 Feb 2012 15:17 1967 8
  • #1
    Adalberd
    Level 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.
  • #2
    marcinj12
    Level 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.
  • #3
    Dżyszla
    Level 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
    Code: mysql
    Log in, to see the code
    (zwróć uwagę na ostatni warunek złączenia - nie da się wyliczyć spalania po ostatnim tankowaniu ;)
  • #4
    walek33
    Level 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.
  • #5
    Dżyszla
    Level 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.
  • #6
    walek33
    Level 28  
    Zgadzam się z Tobą w 100%. Mój błąd.
    Quote:
    To by zmuszało to pobrania nie MIN z analizowanego zakresu, lecz o jeden mniej...

    Lub odjęcie ilości tankowanej z MIN.
  • #7
    Adalberd
    Level 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
  • #9
    Adalberd
    Level 13  
    SQL + php do prezentacji wyniku.