Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
Largo
Witam,

Czy podane poniżej zapytanie jest poprawne ( nie ja jestem jego autorem, mi się ono nie podoba! ):

  1. UPDATE ibf_members SET fg = IF ( id = 1, fg + 1,fg - 1 ) WHERE id IN ( 1, 2 )


Zapytanie ma aktualizować kwoty ( fg ) - jednej dodawać, drugiej odejmować. Nie wiem po co jest ten IF ( czy istnieje takie ID? ), a IN z kolei rozumiem. Czy to jest optymalne?

Pozdrawiam,
Largo
kilas88
jeśli ten zapis aktualizuje kilka rekordów to wystarczy.

IF (warunek, jeśli warunek jest spełniony, jeśli nie jest spełniony)
Largo
Cytat(kilas88 @ 10.04.2009, 20:01:54 ) *
jeśli ten zapis aktualizuje kilka rekordów to wystarczy.

IF (warunek, jeśli warunek jest spełniony, jeśli nie jest spełniony)


Witam,

To wg. Twoich słów, nie powinien on odejmować użytkownika wysyłającemu kwoty, tak? Ponieważ podane zapytanie jak widzisz, dodaje i odejmuje. Czyli warunek chyba nie tak idzie :-) Ale zapytanie ogólnie OK? Czy jest optymalne? Da się je bardziej optymalizować czy zostało dobrze stworzone?

Pozdrawiam,
Largo
kilas88
przede wszystkim powinieneś zastosować właściwsze nazwy tabel i pól, adekwatne do danych, jakie przechowywują.

zapytanie działa następująco: wyszukiwane są rekordy o id 1 i 2 (between byłoby lepsze), w których pole fg zmieniane jest dla id=1 na id=2, a dla id=2 na id=1.

tongue.gif

nie wiem jakie zadanie dokładnie to ma wykonywać, ale nie widzę zbyt wiele logiki w tym zapytaniu.
Largo
Witaj,

  1. <?php
  2. $this->ipsclass->DB->simple_construct( array( 'update' => 'members',
  3.                                                          'set'    => 'fg=IF(id='.$this->ipsclass->input['to_id'].', fg+'.$this->ipsclass->input['amount'].', fg-'.$this->ipsclass->input['amount'].')',
  4.                                                          'where'  => 'id IN (''.$this->ipsclass->input['to_id'].'','.$this->ipsclass->member['id'].')' ) );
  5.            $this->ipsclass->DB->simple_exec();
  6. ?>


Trochę kodu PHP z kodem IP.Board podam, ale powinieneś łatwiej zrozumieć. Oto logika:

Są 2 osoby. Jedna np. chcę kupić przedmiot ( gra ), i aby tego wykonać musi wysłać FG ( Forum Gold dlatego nazwa FG ), jej musi odjąć od konta i tamtemu ma podać tą kwotę. Chyba do tej pory jasne? :-) Po co to id w IF? I jak działa IN, skoro są 3 parametry?

$this->to_id - ID osoby, do której FG jest przekazywane
$this->ipsclass->member['id'] - moje ID, osoby która aktualnie jest zalogowana i wysłała FG
$this->ipsclass->input['amount'] - kwota

Rozumiesz teraz problem? Nie mówiąc o dupnej składni zapytanie ( $this->ipsclass->DB->do_update ) to na dodatek nie ten typ funkcji :-)

Pozdrawiam,
Largo
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.