알렉의 행복 산책

MYSQL 내 DB insert 시 기존 값 유무 검사 후 insert 하기 본문

개발이야기

MYSQL 내 DB insert 시 기존 값 유무 검사 후 insert 하기

알렉 알렉 2018. 9. 30. 01:29

북스캔에서는 책을 검색하거나 바코드로 검색을 하면 히스토리를 저장하게끔 하였는데요. 회원가입도 없고 개인정보도 없습니다. 


그냥 고유 번호를 주고 거기에 저장을 하는데요. 히스토리 기능 중에 바코드를 여러번 찍거나 혹은 페이지를 이동하게 되면 히스토리가 여러개가 보이는 일종의 버그 버그라기 보다는 개선사항이 있었습니다. 

제가 원하는 방향은 동일한 책을 여러번 찍어도 한번만 보이고, 페이지를 이동해도 동일한 책은 한번만 보이는 것이지요. 


물론 다른 책을 찍고 나서 그 전 책을 검색하면 나와야겠지요. 

그러면 DB에 Insert를 해야 하는데요. 무조건 insert를 하는게 아니라 

기존 마지막 레코드에 동일한 키워드 값이 있으면 넣지 말고, 동일한 키워드가 없다면 insert

그래서 찾아보니 몇가지 방법이 있는데, mysql에 not exists 방식이 가장 많이 눈에 띄웠는데요. 

그렇게 사용해서 만드는 방법을 해보니 


INSERT INTO table (field)  

SELECT 'value' FROM DUAL  

WHERE NOT EXISTS (SELECT * FROM table WHERE field='value')  


이런식의 개념이였습니다. DUAL은 가상의 테이블이고, 

그런데 제가 원하는 것이랑 조금 다른 부분은 이런 조건은 

예를 들면 테이블 내에 기존에 값이 없으면 insert하라 인데, 


제가 원하는 조건은 한가지 더 시간차로 인해서 마지막 값이 동일 값이 아니면 insert하라 입니다. 


그래서 


INSERT INTO TABLE명 (컬럼1, 컬럼2, KEYWORD, TIME, DATE)

select 'value1', 'value2' , 'keyvalue', now(), DATE_FORMAT(now(), '%Y.%m.%d') from dual 

where (select KEYWORD from TABLE명 where 컬럼1='value1' ORDER by TIME desc limit 1) <> 'keyvalue' 

;

이런식으로 하였습니다. 

이때 처음에 오류가 났던 것은 select 문장에서 괄호가 있었던 것 제거 해서 해결이 되었고, 

기존 insert문에서는 insert into table명 (컬럼들) values (값들)인데, values를 사용하지 않고, select와 from dual을 이용한점 


그리고 중요한 것이 IFNULL인데요. 이렇게 값을 다시 한번 치환을 해줘야 비교가 제대로 된다는 점도 유의 해야 합니다. 

WHERE IFNULL((SELECT HIST_KEYWORD from HIST_LST_TBL where DEVICE_ID=? ORDER BY HIST_TIME desc limit 1),'') <> ?


마지막으로 WHERE NOT EXISTs를 사용하지는 않고, 필요 조건으로 바꾼 점입니다. 

이렇게 해서 히스토리 상에 동일 내용은 한번만 보이도록 바꾸었네요. 



다운로드 링크

https://play.google.com/store/apps/details?id=com.hitouch.bookscan





기술 노트 앱으로 받으시면 편리하게 보실 수 있습니다. 다운로드
그리고 아래 보시면 컴퓨터 구조 및 운영체제 도서 전체를 PDF로 올려뒀습니다. 받아보시고 참고하시면 좋을거 같습니다.
https://brainwave.tistory.com/895
이제 막 기술노트 라는 유투브 시작했습니다. 앱개발 부터 IT 전반에 대한 기술을 노트 하듯이 설명을 하려고 합니다. 썸네일이 미워서 죄송합니다. 그냥 기술쟁이가 할 수 있는게 이 정도 수준이니 이해부탁드리구요. 괜찮으시다면 지켜봐주세요. 시간 날때마다 해보려고 합니다. [유투브 기술노트]

쇼핑 사이트 한군데서 편리하게 접속하세요~다스캔 클릭
https://www.dascan.com

구주소 신주소 변환, 우편번호 영문주소까지 한방에 가능해요~
http://address.hitouchsoft.com

아이들을 위해서 직접 만들어본 유용하고 다양한 앱과 서비스가 있습니다. 구경해보세요~
http://www.hitouchsoft.com

0 Comments
댓글쓰기 폼