Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dodanie rekordu, jeśli istnieje aktualizacja
Wujeksamodno
post 3.03.2014, 12:36:31
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 12.09.2009

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


Hej, mam pewien problem z którym borykam się od jakiegoś czasu i nie potrafię sobie z nim poradzić.

Chcę wykonać pewne zapytanie, powiedzmy że jest to dodanie do rekordu w odpowiednim polu liczby.

INSERT INTO tabela (Imie,Punkty) VALUES("Wojtek","1")

Chciał bym jednak, aby gdy zachodzi sytuacja gdy taki rekord już istnieje, był tylko update
UPDATE tabela SET punkty=punkty+1 where Imie=`Wojtek`

Czy można coś takiego rozwiązać zapytaniem sql? Dla mnie logicznym w php było by najpierw zrobienie zapytania którego wynikiem by było istnieje albo nie istnieje i potem dodanie zapytania, jednak w aplikacji w jakiej chcę to zrealizować nie można tego zrealizować.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
mmmmmmm
post 3.03.2014, 12:44:40
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Słowa kluczowe: MERGE, UPSERT, a jesli ta baza to MySQL (nie podałeś), to REPLACE (+ odpowiedni klucz). Ale w tym ostatnim przypadku to uwaga (jeśli masz triggery), bo jest robiony DELETE + INSERT.
Go to the top of the page
+Quote Post
nospor
post 3.03.2014, 12:48:35
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




insert...on duplicate key update rozwiaze twoj problem
http://dev.mysql.com/doc/refman/5.6/en/ins...-duplicate.html


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Wujeksamodno
post 3.03.2014, 16:46:40
Post #4





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 12.09.2009

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


Oki, lecz nadal mam problem(mysql odpowiadając na wcześniejsze pytanie).

Robię tak:
  1. INSERT INTO test (nick,pkt) VALUES ("ja","1")
  2. ON DUPLICATE KEY UPDATE pkt=pkt+1;
  3. UPDATE test SET pkt=pkt+1 WHERE nick="ja";

I teraz jeśli nie ma rekordu to tworzy, tyle że od razu pkt=2, więc wykonuje się ten update, natomiast później przy wykonaniu prawidłowo aktualizuje pierwszy rekord ale i tak dodaje nowy.

Próbowałem też
  1. INSERT INTO test (nick,pkt) VALUES ("ja","1")
  2. ON DUPLICATE KEY UPDATE pkt=pkt+1

Ale to nie działa w ogóle i dodaje po prostu kolejny rekord.
Go to the top of the page
+Quote Post
nospor
post 3.03.2014, 16:51:45
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Na pole NICK ma byc zalozony klucz UNIQUE. Niby jakim cudem baza inaczej ma wiedziec, ze dany rekord to duplikat?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Wujeksamodno
post 3.03.2014, 17:33:44
Post #6





Grupa: Zarejestrowani
Postów: 30
Pomógł: 1
Dołączył: 12.09.2009

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


Dziękuję ślicznie i przepraszam za niewiedzę ale z bazami zawsze byłem na bakier, wszystko ślicznie działa. : )
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:45