커뮤니티토픽게시판

보통 SQL 써서 조회수같은거 update할때

 

UPDATE table_name SET int_fld=int_fld+1 WHERE ...

 

이런 식으로 많이 씁니다.

굉장히 편한 방식이죠.. 

근데 문자열 필드도 비슷한 방식으로 쓰는게 가능합니다.

 

UPDATE table_name SET text_fld=concat(text_fld, '블라블라') WHERE ...

 

이렇게 하면 깔끔하고 편리하게 특정 필드에 문자열을 계속 덧붙여나갈 수 있습니다.

별도의 테이블 추가 없이 간단하게 레코드별로 로그를 남기고 싶다거나...

아니면 수정할 필요가 없는 컴멘트 추가 용으로도 가능하죠...

 

아니면 이런것도 가능합니다.. 

 

UPDATE user SET friend_list=if(instr(friend_list,'danbidad,'),friend_list,concat(friend_list, 'danbidad,')) WHERE ...

 

유저 테이블에 유저마다 친구목록을 가지고 있습니다. (friend_list필드)

여기에 새로운 친구ID를 추가시킬때 기존에 이미 추가되어 있으면 추가 안하고 없으면 새로 추가하는걸

SQL만으로 구현한겁니다. PHP로 구현하는 것보다 훨씬 쉽고 간단하죠...

 

  • profile
    글 내용에서 도메인 일괄 변경할 때 많이 쓰죠.
    SET content = REPLACE(content, 'http://기존 도메인', 'http://새 도메인')

    숫자 필드를 업데이트하는 것도 굉장히 활용도가 높은데, XE에서 쓰는 XML 쿼리는 저걸 구현하기가 애매해서 기존 값을 가져왔다가 새 값을 다시 저장하는 비효율적인 방식으로 구현해 놓은 것을 많이 봅니다. 당장 코어의 포인트 모듈만 해도 심각한 race condition에 노출되어 있지요. plus(1) 같은 문법을 지원하긴 하지만, 고정된 값이 아닌 변수를 넣는 예는 XE에서는 본 적이 없어요.