Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: INSERT / UPDATE - jeżeli już istnieje
Forum PHP.pl > Forum > Bazy danych > MySQL
devbazy
Witam

Mam problem z przekształceniem poniższych zapytań

  1. mysql_query("UPDATE comments SET com_p=com_p+1 WHERE com_id='".$_GET['com_id']."' "); //ma się zawsze wykonywać
  2.  
  3. mysql_query("INSERT INTO comments_tpm VALUES(0,'".$_GET['com_id']."',".$userid.",".$val.") "); //ma się wykonać tylko wtedy, gdy taki rekord nie istnieje
  4. mysql_query("UPDATE comments_tpm SET v_res=".$val." WHERE com_id='".$_GET['com_id']."' AND user_id=".$userid." "); //wykonuje się, gdy taki rekord już istnieje


do takiej postaci:

  1. REPLACE [LOW_PRIORITY | DELAYED]
  2. [INTO] tbl_name
  3. SET col_name={expr | DEFAULT}, ...



Prosiłbym o jakiś przykład powyższego zastosowania.
Mchl
Obejrzyj sobie INSERT ... ON DUPLICATE KEY UPDATE ...
devbazy
Zastosowałem poniższy przykład, ale bezskutecznie. Nadal zapisuje kilka razy te same dane.

  1. mysql_query("UPDATE comments SET com_p=com_p+1 WHERE com_id='".$_GET['com_id']."' "); //ma się zawsze wykonywać
  2.  
  3. mysql_query("INSERT INTO comments_tpm (com_id, user_id, v_res) VALUES('".$_GET['com_id']."',".$userid.",".$val.") ON DUPLICATE KEY UPDATE v_res=".$val." ");
Mchl
A założyłeś unikalny indeks na odpowiednie kolumny?
devbazy
Zapewne coś namieszałem, bowiem nadal nie widać żadnych efektów.

Struktura tabeli:

  1. CREATE TABLE IF NOT EXISTS comments_tpm` (
  2. `id` mediumint(8) unsigned NOT NULL auto_increment,
  3. `com_id` mediumint(8) unsigned NOT NULL,
  4. `user_id` mediumint(8) unsigned NOT NULL,
  5. `v_res` tinyint(3) unsigned NOT NULL,
  6. PRIMARY KEY (`id`),
  7. KEY `com_id` (`com_id`),
  8. KEY `user_id` (`user_id`),
  9. KEY `v_res` (`v_res`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=7 ;
  11.  
Mchl
Jeśli dobrze rozumiem, nie chcesz aby powtarzały się rekordy z taką samą parą (com_id, user_id)

Kod
ALTER TABLE comments_tpm
ADD UNIQUE INDEX com_id_user_id(com_id, user_id);
devbazy
Śmiga aż miło, dzięki za pomoc.
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.