2019-02-27
우선 아래와 같은 해시태그를 넣어 놓은 테이블이 하나 있다.

MariaDB [test]> select * from hashtag_tbl; +-----+----------------------------+ | idx | keywords | +-----+----------------------------+ | 1 | aaa,bbb,ccc | | 2 | keyword1,keyword2,keyword3 | | 3 | a,aa,aaa,aaaa,aaaaa | | 4 | keyword,word,key | | 5 | key,aa | | 6 | word,bbb | +-----+----------------------------+ 6 rows in set (0.000 sec)
필자는 해시태그(hashtag)를 컬럼에 집어 넣을때, 띄워쓰기가 없는 단어를, 콤마(,)로 구분해서 집어넣어 놓는다. 그런데 여기서 단순히 like검색으로 'a'라는 해시태그를 검색한다면, idx가 1,3,5인 것들도 검색 될것이다.
MariaDB [test]> select * from hashtag_tbl where keywords like '%a%'; +-----+---------------------+ | idx | keywords | +-----+---------------------+ | 1 | aaa,bbb,ccc | | 3 | a,aa,aaa,aaaa,aaaaa | | 5 | key,aa | +-----+---------------------+ 3 rows in set (0.000 sec)
하지만, 아래처럼 concat()과 꼼수를 이용하면 이용하면 아래와 같이 원하는 키워드가 포함된 row만 검색이 가능하다.
MariaDB [test]> select * from hashtag_tbl where concat(',',keywords,',') like '%,a,%'; +-----+---------------------+ | idx | keywords | +-----+---------------------+ | 3 | a,aa,aaa,aaaa,aaaaa | +-----+---------------------+ 1 row in set (0.000 sec) MariaDB [test]> select * from hashtag_tbl where concat(',',keywords,',') like '%,aa,%'; +-----+---------------------+ | idx | keywords | +-----+---------------------+ | 3 | a,aa,aaa,aaaa,aaaaa | | 5 | key,aa | +-----+---------------------+ 2 rows in set (0.005 sec) MariaDB [test]> select * from hashtag_tbl where concat(',',keywords,',') like '%,bb,%'; Empty set (0.000 sec) MariaDB [test]> select * from hashtag_tbl where concat(',',keywords,',') like '%,bbb,%'; +-----+-------------+ | idx | keywords | +-----+-------------+ | 1 | aaa,bbb,ccc | | 6 | word,bbb | +-----+-------------+ 2 rows in set (0.000 sec) MariaDB [test]> select * from hashtag_tbl where concat(',',keywords,',') like '%,word,%'; +-----+------------------+ | idx | keywords | +-----+------------------+ | 4 | keyword,word,key | | 6 | word,bbb | +-----+------------------+ 2 rows in set (0.000 sec)
concat으로 keywords 컬럼 앞뒤에 콤마(,)를 붙여주어, 모든 키워드의 앞뒤에 콤마(,)가 있도록 해놓은다음에, like검색시에 해당 단어 앞뒤에도 콤마(,)가 있게 해주면 해당 row만 검색이 가능하게 된다.