Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Dwuznaczne zapytanie, z wykorzystaniem IF lub czegoś innego
SJ_Royd
post 9.10.2008, 17:56:14
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 11.07.2006
Skąd: Łódź

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


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ą
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
nevt
post 9.10.2008, 19:49:08
Post #2





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

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


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...?


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

-
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
nrafal
post 9.10.2008, 21:17:33
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 6
Dołączył: 23.09.2008
Skąd: Chorzów

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


Jest też http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html
Go to the top of the page
+Quote Post
SJ_Royd
post 9.10.2008, 21:45:01
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 11.07.2006
Skąd: Łódź

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


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
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 - 09:29