오토세이브 on duplicate key update 채택완료
현재 그누보드가 아닌 일반 게시판을 php로 개발중입니다.
임시저장기능을 만들기 위해 그누보드를 참고하여 on duplicate key update을 이용해 만들고 있는데,
autosave 테이블에 id, table_name(UNI), user_id(UNI), title(UNI), contents, update_dt
이렇게 만들었습니다.
제가 의도하는 바는 동일한 table_name, user_id, title 일때는 contents가 update가 되고
table_name, user_id가 같고 title이 다르면 추가로 insert를 시키고 싶습니다.
$obj 객체에는 tabile_name, user_id, title, contents, update_dt
INSERT INTO autosave (table_name, user_id, title, contents, udt_dt) VALUES ('".$obj->table_name."', '".$obj->user_id."', '".$obj->title."', '".$obj->contents."', '".$obj->update_dt."') ON DUPLICATE KEY UPDATE title='".$obj->title."', contents='".$obj->contents."', udt_dt='".$obj->update_dt."'
이렇게 했는데 다른 title인데도 계속 한 행만 update 되고 있어서 여쭙니다 ㅠ 제가 기능을 잘못 이해하고 있는건가요..?
제가 의도한 대로 하려면 어떻게 해야 할까요?
답변 1개
INSERT INTO autosave (table_name, user_id, title, contents, udt_dt) VALUES ('".$obj->table_name."', '".$obj->user_id."', '".$obj->title."', '".$obj->contents."', '".$obj->update_dt."') ON DUPLICATE KEY UPDATE contents='".$obj->contents."', udt_dt='".$obj->update_dt."'
키를 제외한 나머지만 뒤로 들어갑니다.
참고로 뒤쪽에 타이틀까지 썻으니까 table_name, user_id 만 키로 생각하고, 항상 키가 같으니까 - table_name, user_id 는 같으니까요 - 한 행에만 업데이트 하는 거죠 ^^
답변에 대한 댓글 6개
id를 굳이 하셔야 할 이유가 없다면 id 를 빼주시거나 id 까지 포함해서 쿼리를 작성해야 되야 되지 싶은데요 ^^
table_name varchar(20) utf8_general_ci NO UNI
user_id mediumint(8) NO UNI
title varchar(200) utf8_general_ci NO UNI
contents blob NO
udt_dt int(10) unsigned YES
이렇게 되어있어요!
오토세이브 삭제도 있어서 id값은 있어야 합니다 ㅜㅜ
UNI 는 UNIQUE INDEX 를 뜻하는거라 따로 키로 구성되었다는 뜻은 아닌줄 압니다.
id 를 제외한 나머지 세가지로 구성된 KEY값이 구성되어있는지 확인하셔야 되겠네요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
이렇게 해도 그냥 동일한 행에 contents랑 udt_dt만 update가 됩니다 ㅠㅠ
table_name이랑 user_id는 같고 title이 같은데 왜 update가 되는걸까요..ㅜㅜ