Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Historia zmian rekordów w bazie - wykorzystanie
Forum PHP.pl > Forum > Przedszkole
newmala
Mniej więcej wiem jak zrobić historię zmian w bazie, ale do końca nie rozumiem, jak to wykorzystać.

Powiedzmy, że mam w bazie tabelę klienci i umowy.

Klient robi update na swoich danych. W tabeli history_klient lądują dane sprzed zmiany - tu mam dwie dodatkowe kolumny - change_type i change_date.
Załóżmy, że można robić zmiany tylko w tabeli klienci.
Jak teraz poprawnie wyświetlić umowę z odpowiednimi danymi klienta?
roghatt
ale do końca nie wiadomo o co chodzi. Piszesz o tabeli z historią danych klienta przed zmianą, ale ogólnie nie o to chodzi, tylko chcesz wypisać umowę z danymi klienta?
Po prostu w tabeli umowy dodaj kolumne z id klienta aby z tabeli klienci pobrać jego dane...
newmala
chodzi mi o to, że umowa została już zapisana. Jak chcę ją wyświetlić, to oczywiście mam kolumnę id_klienta w umowie.
zakładając , że nie robię historii zmian. to po każdej zmianie danych osobowych, drukuje mi się inna umowa - z innymi danymi.

Teraz przypadek, kiedy mam prowadzę historię zmian danych klienta. I pytanie jak poprawnie wyświetlić taką umowę z danymi klienta sprzed zmiany?
No oczywiście jeżeli te zmiany powinne zostać uwzględnione, tzn. Umowa została zawarta na podstawie poprzednich danych, tych które teraz mam w tabeli historia.
Czy powinnam jeszcze zaplanować w bazie jakieś dodatkowe kolumny w tabeli umowa, czy klient, aby ten fakt jakoś rozpoznawać.
Czy teraz już wiesz o co mi chodzi?
roghatt
Jak dla mnie to w tabeli historia powinnaś na pewno mieć kolumnę z id klienta przepisanego z tabeli klienci i wtedy gdzieś w skrypcie w miejscu gdzie wyświetlane są dane klienta dodać albo:.
1. jakieś pole rozwijalne w którym by były wypisane wszystkie stare dane z tabeli historia i wybierasz które Ci pasują (w przypadku jeśli w tabeli historia zapisujesz stare dane zawsze jako nowe pole przy każdej zmianie danych).
2. Jeśli w polu historia zawsze będzie jedno pole ze starymi danym to przy wypisywaniu dodać jakiś radio button i tutaj jeśli je zaznaczysz to wtedy skrypt aby pobrał dane z tabeli historia a nie z tabeli klienci
newmala
tak, w tabeli historia trzymam cały rekord z tabeli klient + te dwie kolumny z change_type(czy był insert, czy delete) i change_date - data tej modyfikacji.

Chodzi, o , że np. klient chce podejrzeć umowę sprzed dwóch lat, a do tej pory dokonał już jakieś zmiany w swoich danych. Jak w tym momencie wybrać z bazy odpowiednie dane do tej umowy. Nie wiem właśnie na podstawie czego, bo change_data jest jakaś dla mnie nie wystarczająca, bo nie mam do czego jej porównać. Bo oczywiście w tym momencie musiałabym najpierw sprawdzić, czy są jakieś zapisy w tabeli historia z danymi tego klienta i teraz właśnie, które będą dotyczyć tej sytuacji , brakuje mi jakiejś danej na podstawie której mogłabym wybrać te dane. Oczywiście sytuacja jest trywialna, jak klient nie dokonywał żadnych zmian.

Pewnie jakimś wyjściem byłoby przepisanie danych klienta do tabeli umowa, ale to już oczywiście trzymanie danych nadmiarowych w bazie, choć może się mylę.
roghatt
skoro tabela umowy ma kolumnę daty, bo pewnie ma? data podpisania umowy to wtedy porównujesz z datą wpisaną w historii change_data. Jeśli data umowy jest późniejsza niż data podpisania umowy to wiadomo, że umowa jest na nowe dane i wtedy dane z tabeli klienci, jeśli data podpisania jest wcześniejsza/mniejsza niż data zmiany danych w tabeli historia change_data, to wtedy wiadomo, że umowa jest na stare dane i dane pobierane z tabeli historia
newmala
ok, chyba już załapałam o co biega.

Teraz się zastanawiam jak wybrać te dane, bo może się zdarzyć , że będę miała kilka zapisów, a interesuje mnie ten, którego data jest najbliżej daty umowy, ale też nie może być starsza, bo to znaczy, że te dane klienta do tej umowy zostały wzięte z tabeli klient. Czy jest jakaś funkcja w php zwracająca najmniejszą wartość z porównywalnych?
roghatt
może wystarczy posortować te daty od najmniejszej do największej i wtedy wybierasz tą jedną albo najmniejszą albo największą.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.