본문 바로가기

잡학사전

mysql Query, 특정 문자열 찾고 자르기

사내 칭찬스타 인트라넷 게시판을 만들었다.

문제는 특정 문자열로 구분을 하면 쉽게 카운트가 되는데, 칭찬할 사람을 태그해서 글을 쓰게 만들면 간단하게 처리가 되지만, 게시판 특성을 좀 자유롭게 칭찬을 하도록 유도하고 싶어

anonymous 로도 자유롭게 작성하도록 글작성 권한을 풀었다.

 

그런데, 일정기간이 지나면서 게시글도 많아지고, 이를 카운트하기에는 눈이 아프겠고,, 더군다나 다수의 칭찬자들에게

어떻게 점수를 매겨서 칭찬스타를 선정할 것인가 고민이 된다.

 

그래서 우선 칭찬스타의 글이 많은 것을 기준으로 점수를 배분하고, 거기다 reply 글 수를 합해야 하겠는데,, 이것도 칭찬으로 간주를 할까도 고민이 되었다.. 그렇다고 추천/비추천을 사용하기에는 익명성으로 인해 비추천이 한개라도 나온다면 당사자가 기분이 상할 터... 

기준을 칭찬스타 글1 + 댓글 0.5 합산으로 점수를 합하면 어떨까...

 

우선 칭찬글 수에 대해 count 를 해야 해서 maria 클라이언트를 사용하려다,, 그냥 하이디sql을 설치했다 무료버전이라고 하니깐... 

 

설정은 그냥 간단하다.. 웬만한 DB클라이언트 접속 유틸리티하고 같으니깐..

mysql 접속해서 user 계정하나 만들어 주고 난 뒤,, 아무리 로컬네트웍이지만 해킹우려도 있고 해서 특정아이피 (내피시)에서만 접속되게 했다.. 그리고 HeidiSQL 프로그램 다운로드 받은 뒤 설정해주면 된다..

서버에 원격데스크 톱 연결 후  터미널로 작업하는 거 보다 훨 씬 빠르고 UI 또한 좋다.. 작업하기 편하게...

 

그다음 해당 테이블 구조 확인 후 쿼리문을 작성했다.. 어라.. 생각 보다 쿼리명령어가 오라클하고 유사하네...^^

 

오늘의 주제처럼,, 칭찬인을 셀렉해야하는데,, 문자열을 잘라야 하고.. 또 불특정 위치에 사람이름이 들어가 있으니깐..

좀처럼 쿼리가 쉽지가 않다.. 사람들 이름이 다 다르니깐..

그래서.. 칭찬인 이름앞에 해시태그(#)를 붙여달라고 공지를 한 후에 지금까지 쓰여진 칭찬글 하나하나 정성스럽게

노가다로 #을 붙이고 이름을 단순하게 적은 것도 수정을 했다..  (공지이후에는 잘 따라서 #을 붙이고 쓰는 분들이 있다.)

 

 

자!  문자를 잘라야 하니깐 select substr(컬럼,1,3) from  이렇게 하면 당연히 안된다..

문자열의 인덱스 값에서 특정 문자를 찾아야 하니 substring_index(컬럼,'#',-1)  우선 이것을 넣어보니 잘된다.. 그런데 #뒤쪽 문자열이 모두 다 나온다.. 그래서  substr(substring_index(컬럼,'#',-1),1,3) 이렇게 해줬더니 

이름만 딱 나온다...

 

마지막으로 칭찬인을 기준으로 그룹핑을 해주고, 카운트 해준뒤 댓글수 합도 같이 해주면,, 

문제해결!