Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> INSERT / UPDATE - jeżeli już istnieje
devbazy
post
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 4
Dołączył: 10.08.2009

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Obejrzyj sobie INSERT ... ON DUPLICATE KEY UPDATE ...
Go to the top of the page
+Quote Post
devbazy
post
Post #3





Grupa: Zarejestrowani
Postów: 93
Pomógł: 4
Dołączył: 10.08.2009

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


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


Ten post edytował solid23 27.11.2009, 19:11:03
Go to the top of the page
+Quote Post
Mchl
post
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


A założyłeś unikalny indeks na odpowiednie kolumny?
Go to the top of the page
+Quote Post
devbazy
post
Post #5





Grupa: Zarejestrowani
Postów: 93
Pomógł: 4
Dołączył: 10.08.2009

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


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.  


Ten post edytował solid23 27.11.2009, 21:08:05
Go to the top of the page
+Quote Post
Mchl
post
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


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);
Go to the top of the page
+Quote Post
devbazy
post
Post #7





Grupa: Zarejestrowani
Postów: 93
Pomógł: 4
Dołączył: 10.08.2009

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


Śmiga aż miło, dzięki za pomoc.
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 Aktualny czas: 20.08.2025 - 06:39