Pokaż wyniki 1 do 5 z 5

Temat: AntyDuplikat w MySQL

  1. #1

    Domyślnie 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
    Ostatnio edytowane przez Teeed : 05-16-2008 - 21:12

  2. #2

    Domyślnie

    Kod:
    INSERT INTO...
    Po za tym jesli dobrze rozumiem idee, to chyba raczej BEFORE INSERT, a nie AFTER INSERT.
    Pozdrawiam

  3. #3

    Domyślnie

    aaa nie zauwazylem heh -,-

    dobra to jak nikt nie wie, jak zrobie to te metoda to moze jakas inna wam sie nasuwa?

  4. #4

    Domyślnie

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

  5. #5

    Domyślnie

    Troche pokombinowałem i dziala..

    thx

Podobne wątki

  1. PHP i MySQL
    By FX12 in forum PHP/CGI/ASP/JSP/J2EE
    Odpowiedzi: 2
    Autor: 04-22-2008, 14:36
  2. Podatność mysql??
    By R3mal in forum Hacking
    Odpowiedzi: 2
    Autor: 03-16-2008, 20:59
  3. mysql password
    By ble34 in forum Odzyskiwanie haseł
    Odpowiedzi: 4
    Autor: 09-19-2007, 18:57
  4. Zapytanie mysql
    By andrew8666 in forum Newbie - dla początkujących!
    Odpowiedzi: 6
    Autor: 09-17-2007, 14:22
  5. mysql ?????
    By ble34 in forum PHP/CGI/ASP/JSP/J2EE
    Odpowiedzi: 6
    Autor: 04-23-2007, 23:27

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj