Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]UPDATE or INSERT
marck
post
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 27.05.2008

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


Mam zapytanko które działa na zasadzie obsługi błędu. Ma za zadanie dodać rekord, gdy update się niepowiedzie:

$update='cośtam"

if (mysql_errno()){

$insert="cośtam"
}

Niedokońca jestem pewien, czy to jest prawidłowe, choć chodzi. Może macie ciekawszy, bardziej odpowiedni sposób, by 'cośtam' zwiększył stan, jeśli istnieje, lub dodał jeśli go jeszcze nie ma. Za wszelką pomoc z góry dzięki.
Go to the top of the page
+Quote Post
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


idea jest w zasadzie prosta, aby zrobić UPDATE trzeba mieć (a w zasadzie to zwykle trzeba mieć) jakiś klucz podstawowy coś w stylu, jeśli nie istnieje klucz podstawowy to robisz INSERT, przykład:

  1. <?php
  2. if(isset($id)) {
  3. query("UPDATE cos SET cosinnego='cos' WHERE id=$id");
  4. } 
  5. else {
  6. query("INSERT INTO....");
  7. }
  8. ?>


Pozdrawiam
Go to the top of the page
+Quote Post
nevt
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


w MySQL odpowiednią konstrukcja dla takiej sytuacji jest REPLACE ... jak w tabeli znajdzie odpowiednią wartość dla klucza(y) podstawowego to działa tak samo jak UPDATE ... a jak nie znajdzie to działa tak samo jak INSERT ... i zadnych dodatkowych warunków nie trzeba...


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
marck
post
Post #4





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 27.05.2008

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


Tylko że replace działa na polach z kluczem głównym a mi chodzi o pole inne. Np. mam:
-id(autoinc, primary) ,idMat, ilosc.

Chciałbym by dane wprowadzone z formularza(id,idMat,ilość), zostały wstawione, gdy idMat nie istnieje, a updatowane (zwiększona ilość) jeśli już taki idMat jest.

Ponieważ klucz jest na id, więc nie mam pomysłu jak to zrobić, bo chyba INSERT... ON DUPLICATE KEY UPDATE tu nie pójdzie, a może się mylę?

Ten post edytował marck 18.06.2008, 23:06:14
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Ponieważ klucz jest na id, więc nie mam pomysłu jak to zrobić, bo chyba INSERT... ON DUPLICATE KEY UPDATE tu nie pójdzie, a może się mylę?


Hmm, a nałożenie UNIQUE na tamto pole i ON DUPLICATE KEY nie rozwiązałoby problemu?

Ten post edytował erix 18.06.2008, 23:22:07


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
nevt
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


Cytat
Tylko że replace działa na polach z kluczem głównym a mi chodzi o pole inne. Np. mam:
-id(autoinc, primary) ,idMat, ilosc.
Chciałbym by dane wprowadzone z formularza(id,idMat,ilość), zostały wstawione, gdy idMat nie istnieje, a updatowane (zwiększona ilość) jeśli już taki idMat jest.

Skoro pole id jest (autoinc, primary) to raczej nie jest wprowadzane z formularza... domyślam się, że pole idMat jest unikalne w tej tabeli, a w takim razie po co dodatkowy klucz id? pokaż definicje tej tabeli i opisz dokładnie do czego służy. twój problem prawdopodobnie wynika z niewłaściwej struktury danych...


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
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 Aktualny czas: 22.08.2025 - 09:21