![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
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:
Pozdrawiam |
|
|
![]()
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... - |
|
|
![]()
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 |
|
|
![]()
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! |
|
|
![]()
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... - |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 09:21 |