2013-05-23 9 views
5

Pracuję nad aplikacją bazy danych z MySQL i PHP. W tej chwili próbuję uzyskać zmiany spowodowane przez ostatnią aktualizację. Moim pierwszym sposobem rozwiązania tego problemu jestMySQL: Jak uzyskać zmiany ostatniego UPDATE

  • się „stare” państwa SELECT
  • Doing zmiany z aktualizacją
  • coraz „nowych” stan z wybranymi
  • porównując tablic PHP

są trzy połączenia MySQL ...

Czy istnieje jakiś sposób, aby skrócić ten?

+2

Przechowywać oryginalny stan po załadowaniu formularza lokalnie, a następnie porównać lokalnie, co wysyłasz w aktualizacji? Nie ma powodu, aby atakować MySql w ustalaniu zmian. – JCleveland

+0

Ponieważ w zasadzie w pamięci masz już zamierzony stan "nowy", możesz zapisać co najmniej drugie WYBIERANIE. Dopóki twoja aktualizacja NIE zgłasza żadnego błędu, możesz polegać na tym, że stan bazy danych będzie taki, jaki twoim zdaniem jest. Mówiąc więcej, dobrze byłoby wiedzieć, co dokładnie planujesz zrobić z tą deltą. – joerx

+0

Czy potrzebujesz tylko określić liczbę wierszy, których dotyczy, lub czy wymagane jest szczegółowe porównanie danych? –

Odpowiedz

1

powiem ci, jak to zrobić,

kiedy Update wiersz, po pierwsze ja dostać którym wiersz jestem aktualizowanie i wzywam ich active records. następnie porównać każdą kolumnę active records z polami formularza. tak wiem, która kolumna się zmieniła.

i jeśli chcesz przechowywać zmienione kolumny, utwórz tabelę history, która będzie podobna;

id  (for primary key) 
tablename (which table i'm updating) 
recordid (which row i'm updating) 
column (which columns has been changed) 
oldvalue (active record value) 
newvalue (form value-updated value) 
date  (obvious) 
user  (who did this change) 

po tym można użyć wyobraźni do struktur, w jaki sposób chcesz użyć.

1

Można zrobić before update trigger że będzie domagał całą kopię rekordu do tabeli historii, która również zawiera dodatkowe dane o stanie, który chcesz zapisać (zaktualizowane data, użytkownik itp)

ten sposób będziesz mieć pełna historia zmian tego, co się stało z tym, co nagrywa i powinno się odbyć w sposób przejrzysty. pamiętaj, że powinieneś upuścić wszystkie unikalne ograniczenia z tabeli historii.

Mam nadzieję, że to pomoże.

Powiązane problemy