Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: IF ( <warunek> ) UPDATE else INSERT
Forum PHP.pl > Forum > Bazy danych > MySQL
dr_bonzo
Wiecie jak uzyskac cos takiego:
- jesli istnieje rekord w tabeli to zastosuj: UPDATE
- jesli nie istnieje do: INSERT
w jednym zapytaniu w mysql 4.1?
SamoChwała
A po co Ci aktualizacja (nadpisanie) istniejącego rekordu?

Moim zdaniem powinny być dwa zapytania:

1. sprawdzającego czy taki rekord istnieje
2. dodający nowy rekord

Teraz tak (pseudokod):

Jeśli w bazie jest rekord XXX
to wyjdz
jeśli nie to dodaj
Vertical
  1. IF SELECT *
  2. FROM tabela.kolumna != '' THEN UPDATE ...
  3. [ELSE INSERT ...]
dr_bonzo
Cytat
A po co Ci aktualizacja (nadpisanie) istniejącego rekordu?
Moim zdaniem powinny być dwa zapytania:
1. sprawdzającego czy taki rekord istnieje
2. dodający nowy rekord

Tez zaczalem od dwoch zapytan, ale chodzi mi o ten czas miedzy sprawdzeniem a dodaniem (rekord moze powstac) -- dlatego chcialem to zrobic w JEDNYM zapytaniu. Jesli sie nie da to pozostane przy dwoch zapytaniach
markac
  1. REPLACE [LOW_PRIORITY | DELAYED]
  2. [INTO] tbl_name [(col_name,...)]
  3. VALUES ({expr | DEFAULT},...),(...),...


Or:

  1. REPLACE [LOW_PRIORITY | DELAYED]
  2. [INTO] tbl_name
  3. SET col_name={expr | DEFAULT}, ...


Or:
  1. REPLACE [LOW_PRIORITY | DELAYED]
  2. [INTO] tbl_name [(col_name,...)]
  3. SELECT ...


Cytat
REPLACE works exactly like INSERT, except that if an old record in the table has the same value as a new record for a PRIMARY KEY or a UNIQUE index, the old record is deleted before the new record is inserted.


Źródło: MySQL Reference Manual.

Jeśli rekord, który zechcemy zmodyfikować nie istnieje, to zostanie on dodany, w innym przypadku zmieniony. Pamietać należy o nadaniu odpowiednich indeksów (PRIMARY KEY lub UNIQUE).
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-2024 Invision Power Services, Inc.