-
AntyDuplikat w MySQL
no coz.. nie prosze o pomoc czesto, ale w tym przypadku ju wymieklem ;) a chce to zrobic bardziej profesjonalnie..
a wiec.. mam tabele `logi`
ktora ma 2 pola
logi_nick oraz logi_ip
chce zrobic tak, aby jednym zapytaniem do sql-a dodawac wpis ale jak już taki wpis istnieje, to updatowac ip...
probalem ordynarnego if-a- takich dziwnych rzecyz w sql-u w zyciu nei robilem ;P
gdzies w sieci znalazlem przykladik robienia "Tigger"
no to jazda
Kod:
CREATE TRIGGER insert_logi
BEFORE INSERT
ON logi
FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM logi WHERE logi_nick=new.logi_nick)=0
THEN
INSERT logi VALUES(logi_nick, logi_ip);
ELSE
UPDATE logi SET logi_ip=new.logi_ip WHERE logi_nick=new.logi_nick;
END IF;
END;
potem by jus obie to kulturalnie dziallo... jednak gdy próbuje takie cos wsadzic otrzymuje blad:
Kod:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT logi VALUES(logi_nick, logi_ip)' at line 7
probowalem wszystkiego co jest mi znane ;P a nie chce robic tego na zasadzie: SELECT COUNT, sprawdic php-em ile jest, jak jest to rabnac nastepnym zapytaniem UPDATE lub INSERT....
Z gory dziekuje za pomoc ;)
-
Po za tym jesli dobrze rozumiem idee, to chyba raczej BEFORE INSERT, a nie AFTER INSERT.
Pozdrawiam
-
aaa nie zauwazylem heh -,-
dobra to jak nikt nie wie, jak zrobie to te metoda to moze jakas inna wam sie nasuwa?
-
Ja proponuję taki sposób:
Mamy tabelę:
Kod:
mysql> describe tabela;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | NULL | |
| nr | int(10) unsigned | NO | | NULL | |
+-------+------------------+------+-----+---------+-------+
oraz kilka rekordów:
Kod:
mysql> select * from tabela;
+----+-----+
| id | nr |
+----+-----+
| 12 | 103 |
| 24 | 245 |
+----+-----+
W taki sposób można dodać kolejny rekord:
Kod:
mysql> insert into tabela values(23, 218) on duplicate key update nr=218;
mysql> select * from tabela;
+----+-----+
| id | nr |
+----+-----+
| 12 | 103 |
| 24 | 245 |
| 23 | 218 |
+----+-----+
i zarazem uaktualnić pole:
Kod:
mysql> insert into tabela values(23, 220) on duplicate key update nr=220;
mysql> select * from tabela;
+----+-----+
| id | nr |
+----+-----+
| 12 | 103 |
| 24 | 245 |
| 23 | 220 |
+----+-----+
"on duplicate key" działa zarówno na atrybut "primary key" jak i "unique" (przynajmniej tak wynika z dokumentacji MySQL).
-
Troche pokombinowałem i dziala..
thx ;)