Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Dwuznaczne zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
SJ_Royd
Nie wiem jak skonstruować zapytanie do bazy tak, żeby sprawdziło, czy rekord o podanych danych istnieje w tabeli (*1) i w zależności od tego zaktualizuje go (*2) lub wstawi nowy (*3)

*1
Kod
SELECT count(*) FROM tbl WHERE UID = {uid} AND AID = {aid};


*2
Kod
UPDATE tbl SET Cena = {cena} WHERE  UID = {uid} AND AID = {aid};


*3
Kod
INSERT INTO tbl VALUES (null,  {uid}, {aid}, {cena});


Mam na myśli coś takiego
Kod
IF (SELECT count(*) FROM tbl WHERE UID = {uid} AND AID = {aid}) > 0 THEN
  UPDATE tbl SET Cena = {cena} WHERE  UID = {uid} AND AID = {aid}
ELSE
  INSERT INTO tbl VALUES (null,  {uid}, {aid}, {cena})
END IF


{uid}, {aid}, {cena} - jakies dane przekazane z php'a
Niestety takie coś nie działa i wyrzuca błąd, a nie chcę do tego angażować php'a bo wg założenia to MySQL ma zająć się tą sprawą
nevt
cytuję z manuala MySQL:
Cytat
REPLACE Syntax

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
Or:

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
Or:

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]

SELECT ...

REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted.


na marginesie, czy używanie google i przeglądanie manuali jest naprawdę tak trudne...?
SJ_Royd
Używanie googla nie jest takie trudne ale nie zawsze on daje wynik taki jak by się chciało, a poza tym trzeba wiedzieć jak sprecyzować zapytanie. Ja szukałem konstrukcji IFa, ale rezultaty działania były nijakie.
REPLACE jakimś cudem dorzucało mi następny wpis więc sobie darowałem.
Zastosowałem składnię
Kod
INSERT INTO tbl
VALUES (NULL, '{uid}', '{aid}', '{cena}', NOW())
ON DUPLICATE KEY UPDATE CenaL='{$cena}', Data = NOW();

i to działa bardzo ładnie i dziękuję serdecznie wam obu a w szczególności nrafal za odpowiedni link
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.