Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]UPDATE or INSERT
Forum PHP.pl > Forum > Przedszkole
marck
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.
Cezar708
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
nevt
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...
marck
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ę?
erix
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?
nevt
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...
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.