2013-03-08 1 views
5

학습 MySQL과 질문을 가진 더미 ...Mysql : 행이 존재하지 않으면 insert, 그렇지 않으면 update .. 간단한 명령이 있습니까?

내가 간단하여 원하는 효과를 얻을 수 있습니다

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

내가 그 logo_id와 USER_ID는 고유해야합니다, 그래서 테이블에 DB unique check했습니다. 행이 존재하면 첫 번째 쿼리가 실패하고 두 번째 업데이트가 실행됩니다 ... 그러나 이것은 일종의 해킹을 느낍니다.이 작업을 수행하는 더 좋은 방법이 있습니까?

+0

스택 오버플로에 대해서는 (http://stackoverflow.com/questions/6030071/mysql-table-insert-if-not-exist-otherwise-update)를 참조하십시오. – shola

+0

http://stackoverflow.com/questions/5557479/mysql-update-if-exists-else-insert의 가능한 복제본 –

답변

8

$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

내가 어떤 고유 인덱스 열이 내 목표를 달성하기 위해 WHERE 절을 사용할 필요가 없습니다 때문에, 나는 왔어요 가장 우아한 솔루션입니다보십시오 :

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

덕분에 Stack Overflow thread (여기에도 설명이 있습니다).

관련 문제