Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Jak zaaktualizować rekord i dodać jeżeli nieistnieje.
Forum PHP.pl > Forum > Przedszkole
seba22
Zdrastwujcie riebiata !

Mam miłe zapytanie dotyczące MySQL.

Załóżmy że mamy tabelę o nazwie "kotki" a w niej wartości
ID IMIĘ
1 xx
2 xx


Teraz chce zmienić imię rekordu nr 2.

Wykonujemy

Update xxx set xxx='ala' where xxx = id = 2;

if zapytanie = 1 then
{
zmieniono pomyslnie}
else
{
insert into kotki id=2,imie='ala
}


Czy nie da się już w jednym zapytaniu SQL połączyć
Update, on error insert new ?

Jeżeli istnieje taki rekord, to update, jezeli nie to insert.
Tylko żeby upakować to w ramach optymalizacji do jednego "query" smile.gif

pozdrawiam


ziqzaq
Możesz spróbować insert ... on duplicate key update.
Tylko pamiętaj o nadaniu UNIQUE dla kolumn, które maja byc unikalne.
Pozdrawiam.
PawelC
Sprawdź najpierw czy istnieje taki rekord przy pomocy mysql_num_rows, jeżeli niema to dodaje do bazy jeżeli jest to aktualizuje. Pozatym Twoje zapytanie dziwnie wygląda, powinno być tak:
  1. UPDATE xxx SET xxx='ala' WHERE id = 2;

A nie tak jak Ty miałeś, bo Twoje zapytanie jest błędne.
Kolejne pytanie dlaczego sam ustalasz numer ID?
Wydaje mi się że w jednym zapytaniu tego nie upchasz, najpierw musisz sprawdzić czy istnieje taki rekord w bazie, poźniej zrobić update lub insert osobnym zapytaniem.
jasin
A takie coś zadziała:
  1. INSERT INTO tabela(IMIE) VALUES('mruczek')
  2. ON DUPLICATE KEY UPDATE IMIE=VALUES(IMIE);
  3.  
seba22
Cytat(jasin @ 3.10.2009, 08:05:02 ) *
A takie coś zadziała:
  1. INSERT INTO tabela(IMIE) VALUES('mruczek')
  2. ON DUPLICATE KEY UPDATE IMIE=VALUES(IMIE);
  3.  



Czy twój kod dotyczy opcji w której mam unique ?

No niestety nie mogę mieć unique, chociaż ID jest przecież wartością niejako jednoznaczną z racji faktu automatycznej numeracji.

Odnośnie selecta z przodu, właśnie w ten sposób obecnie kod jest wykonywany.

Najpierw w php sprawdzam czy istnieje, jeżeli nie to dodaje.

Szukałem czy nie dało by się tego jeszcze skrócić od strony technicznej.

prachwal
a może tak

  1. UPDATE tableName SET field1=fieldVal1, ... WHERE keyColName= keyValue;
  2. IF @@rowcount = 0
  3. INSERT INTO tablename(field1,...) VALUES(fieldVal1,....);

vokiel
Jak nie chcesz insert ... on duplicate key update to może replace Cię poratuje. Tyle, że ten pierwszy jest ponoć szybszy.
Tryllion
Witam

Nie będę nowego tematu robić, pytanie, co może być w tej składni źle questionmark.gif?

  1. INSERT INTO `tab` (
  2. `ID_tab` ,
  3. `nazwa`
  4. )
  5. VALUES (
  6. NULL , 'cukierkowy okoń'
  7. )
  8. ON DUPLICATE KEY UPDATE `tab` SET `nazwa` = 'byl' WHERE `tab`.`ID_tab` =1 LIMIT 1 ;

Treść komunikatu:
  1. MySQL zwrócił komunikat:
  2.  
  3. #1064 - Something is wrong in your syntax obok 'ON DUPLICATE KEY UPDATE `tab` SET `nazwa` = 'byl' WHERE `tab`.' w linii 8

Używam WEBSERVRa , ma on w sobie phpMyAdmina , w nim mogę wejść do bazy i wkleić kod sql, tyle że dostaję komunikat o złej składni, nie rozumiem dlaczego, czy serwer nie obsługuje DUPLICATE ? Mam wersję mysql 4.x , więc powinno być.
Już brak mi pomysłów, sprawdziłem białe znaki itd sciana.gif

Plz help.

mls
  1. INSERT INTO `tab` (`ID_tab`, `nazwa`) VALUES (1, 'cukierkowy okoń') ON DUPLICATE KEY UPDATE `nazwa` = 'byl'
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.