Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]aktualizacja danych w bazie, jak najbardziej optymalnie to zrobić
Rozpalacz
post
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 31.01.2006

Ostrzeżenie: (0%)
-----


Witam,

w jaki sposób najlepiej aktualizować dane w bazie danych?

Zakładając ze użytkownik edytuje swój profil, zmienia tylko imię,
Do tej pory robiłem aktualizacje całego wiersza. Czy warto i w jaki sposob sprawdzić
co sie zmieniło jeśli chodzi o rekordy i dopiero aktualizować tylko konkretne zmiany?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
barthpl
post
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


A jeżeli zrobimy sobie model który będzie miał pola pobrane z bazy zapisane w jednej tablicy ($vals) a wprowadzone zmiany będzie przechowywał w innej ($valsChanged). Do polecenia update będą przekazywane tylko kolumny zapisane w $valsChanged. Po wykonaniu polecenia update nastąpi nadpisanie zmiennych z tablicy $vals przez zmienne z tablicy $valsChanged a sama tablica $valsChanged zostanie wyczyszczona.

W wypadku gdy użytkownik będzie chciał się dostać do obecnej wartości danej kolumny zostanie zwrócona wartość z tablicy $valsChanged jeżeli istnieje w przeciwnym warunku z tablicy $vals.

  1. <?php
  2. class MyObject
  3. {
  4. private $valsChanged = array();
  5. private $vals = array();
  6.  
  7. ...
  8.  
  9. public function getVals( $name )
  10. {
  11. // oczywiście można dożucić sprawdzanie czy dana kolumna faktycznie istnieje
  12. return isset($this->valsChanged [$name]) ? $this->valsChanged [$name] : $this->vals[$name];
  13. }
  14.  
  15. public function update()
  16. {
  17. $querySet = '';
  18. foreach( $this->valsChanged as $key => $val )
  19. $querySet .= "$key = '$val', ';
  20.  
  21. $queryWhere
  22. foreach( $this->vals as $key => $val )
  23. $queryWhere.= "$key = '$val' AND ;
  24.  
  25. $query = sprintf( "UPDATE tabela SET %s WHERE %s", substr($querySet, 0, -2), substr($queryWhere, 0, -4) );
  26. mysql_query( $query );
  27. }
  28. }
  29. ?>


To tylko taki schemat ideologiczny nie sprawdzany. Ale czy to nie będzie bardziej efektywne niż za każdym razem wysyłanie wszystkiego (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 15:51