Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> IF ( <warunek> ) UPDATE else INSERT, aktualizacja lub wstawienie rekordu
dr_bonzo
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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?
Go to the top of the page
+Quote Post
SamoChwała
post
Post #2





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 28.07.2004
Skąd: Łódź

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


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
Go to the top of the page
+Quote Post
Vertical
post
Post #3





Grupa: Zarejestrowani
Postów: 848
Pomógł: 0
Dołączył: 7.07.2004
Skąd: Wrocław

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


  1. IF SELECT *
  2. FROM tabela.kolumna != '' THEN UPDATE ...
  3. [ELSE INSERT ...]
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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
Go to the top of the page
+Quote Post
markac
post
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

Ostrzeżenie: (10%)
X----


  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).
Go to the top of the page
+Quote Post

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: 24.08.2025 - 02:10