mysql
2013-03-08 12 views 5 likes 
5

Learning Mysql i mające stosy pytań ...Mysql: wstaw jeśli wiersz nie istnieje, czy w przeciwnym razie ... czy jest prostsze polecenie?

mogę osiągnąć pożądany efekt przez prosty:

$mysqli->query("INSERT results SET user_id = '".$user_data[0]['user_id']."', logo_id = '".$mysqli->real_escape_string($_GET['logo_id'])."'"); 
$mysqli->query("UPDATE results SET result_tries = result_tries +1 WHERE logo_id = '".$mysqli->real_escape_string($_GET['logo_id'])."' AND user_id = '".$user_data[0]['user_id']."'"); 

Mam DB unique check na stole, tak że logo_id i user_id powinien być unikalny. Więc jeśli istnieje wiersz pierwszego kwerendy nie powiedzie się, a druga aktualizacja jest wykonywana ..., Ale to czuje rodzaju hack ... Czy istnieje lepszy sposób to zrobić?

+0

Proszę odnieść się (http://stackoverflow.com/questions/6030071/mysql-table-insert-if-not-exist-otherwise-update) na przepełnienie stosu. – shola

+0

Możliwe duplikaty http://stackoverflow.com/questions/5557479/mysql-update-if-exists-else-insert –

Odpowiedz

8

Spróbuj

$user_id = $user_data[0]['user_id']; 
$logo_id = $mysqli->real_escape_string($_GET['logo_id']); 

$sql = "INSERT INTO results (user_id, logo_id, result_tries) 
     VALUES ('$user_id', '$logo_id', 0) 
      ON DUPLICATE KEY UPDATE result_tries = result_tries + 1"; 

$mysqli->query($sql); 
0

jest to najbardziej eleganckie rozwiązanie Doszedłem, ponieważ nie mam żadnego unikalnego indeksu kolumny i trzeba użyć klauzuli WHERE, aby osiągnąć mój cel:

DELETE FROM assignment_status WHERE assignment_id = 114 AND user_id = 1; 
INSERT INTO assignment_status (assignment_id, user_id, status, note) VALUES (114, 1, 2, "Some useful information goes here..."); 

Dzięki temu Stack Overflow thread (znaleźć również wyjaśnienie).

Powiązane problemy