Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Jak zaaktualizować rekord i dodać jeżeli nieistnieje.
seba22
post
Post #1





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


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" (IMG:style_emoticons/default/smile.gif)

pozdrawiam


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
ziqzaq
post
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


Możesz spróbować insert ... on duplicate key update.
Tylko pamiętaj o nadaniu UNIQUE dla kolumn, które maja byc unikalne.
Pozdrawiam.
Go to the top of the page
+Quote Post
PawelC
post
Post #3





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


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.
Go to the top of the page
+Quote Post
jasin
post
Post #4





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

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


A takie coś zadziała:
  1. INSERT INTO tabela(IMIE) VALUES('mruczek')
  2. ON DUPLICATE KEY UPDATE IMIE=VALUES(IMIE);
  3.  
Go to the top of the page
+Quote Post
seba22
post
Post #5





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


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.

Go to the top of the page
+Quote Post
prachwal
post
Post #6





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

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


a może tak

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

Go to the top of the page
+Quote Post
vokiel
post
Post #7





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Jak nie chcesz insert ... on duplicate key update to może replace Cię poratuje. Tyle, że ten pierwszy jest ponoć szybszy.
Go to the top of the page
+Quote Post
Tryllion
post
Post #8





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 29.07.2009

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


Witam

Nie będę nowego tematu robić, pytanie, co może być w tej składni źle (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/sciana.gif)

Plz help.

Go to the top of the page
+Quote Post
mls
post
Post #9





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

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


  1. INSERT INTO `tab` (`ID_tab`, `nazwa`) VALUES (1, 'cukierkowy okoń') ON DUPLICATE KEY UPDATE `nazwa` = 'byl'


Ten post edytował mls 19.10.2009, 13:13:27
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: 25.09.2025 - 02:57