maciu
29.07.2006, 09:39:10
Mam tabele bazy danych z kilkoma polami: id, imie, nazwisko, telefon
Gdy chcę zmodyfikować dany rekord to wyświetla mi się formularz z wpisanymi tam danymi rekordu, które mogę modyfikować. Raz mogę chcieć zmienić samo pole imie, raz np. wszystkie pola.
I teraz w zapytanie UPDATE muszę za każdym razem modyfikować wszystkie pola, mimo, że zmieniłem tylko jedno? Przez formularz przesyłane są ponownie wszystkie pole przez $_POST, więc nie mogę sprawdzić, które pola zostały zmodyfikowane, bo za każdym razem przesłane zostaną wszystkie.
Czy jest jakiś mechanizm, który sprawdza, które pola naprawde zostały zmienione, a które nie? Czy też mam się tym w ogóle nie przejmować i updatować wszystkie pola, bo na wydajności nie wiele się straci?
Denver
29.07.2006, 10:37:42
Jedno zapytanie UPDATE nie jest aż tak pamięciożerne, tym bardziej jeśli są to bardzo małe ilości danych. Zapisywanie tylko zmienionych pól może czasem być niepożądane np. w sytuacji, gdy równolegle z Tobą ktoś inny edytuje te same dane. Załóżmy taką sytuację:
1. Otwierasz panel edycji.
2. Sekundę po tobie panel otwiera także inny adminsitrator.
3. Administrator ten zmienia wszystkie pola i je wysyła.
4. Sekundę po nim ty wysyłasz tylko dwa zmienione pola.
Jeśli opracowałbyś jakiś mechanizm zmiany tylko i wyłącznie tych pól, do których została wpisana inna treść niż ta wyciągnięta z bazy, to po zapisie swojego formularza widniałyby tylko dwa "twoje" pola, a reszta miałaby treść zapisaną przez drugiego administratora. Sam zdecyduj, czy takie rozwiązanie byłoby pożądane.
Mógłbyś też sprawdzać, które pola zostały zmienione najpierw poprzez wykonanie zapytania SELECT i porównanie wysłanych wartości z obecnymi wartościami w bazie - ale to już są dwa zapytania.