golang , mysql, gorm 환경에서 json 필드를 사용해서 데이터를 관리하려함
원하는건
where 여러 조건 and ( 요일 in ( '월', 화, 수 )
이런 느낌으로 셀렉하고 싶었으나... 문제가 좀 많았다.
문제 1
mysql, mariaDB 가 json 쿼리 함수가 다르다.
마리아DB는
SELECT JSON_CONTAINS(@json, '2', '$.A');
이런 식이고, mysql은 파라미터가 2개만 들어감
https://stackoverflow.com/questions/43247098/mysql-filter-json-contains-any-value-from-array
mysql 쿼리
문제2
요일 in (월, 화, 수)
이런 기능을 json으로 하고 싶었는데...
마리아 DB기준 json_overlaps 이 함수다
https://mariadb.com/kb/en/json_overlaps/
문젠, 이게 .. 버전을 탄다.
mariaDB 10.9 부터 가능
나는 10.6 이라서.. 쓸수가없다..
문제3
json_overlaps 이걸 쓰지 못해서
JSON_CONTAINS 를 연결해야했따
where A ~~~~~ 조건 and ( JSON_CONTAINS or JSON_CONTAINS or JSON_CONTAINS )
이런 식으로 ...
근데... gorm 에서는 ( 괄호를 사용하기 힘들다
DB().Where -> and
DB().Or -> or
조건인데... 괄호를 구현하기가 힘들다
그래서 ... string으로 raw쿼리로 짜야했다.,.
// 요일 검색
condition := ""
for _, day := range req.Data.Days {
condition += fmt.Sprintf("JSON_CONTAINS(data, '%s', '$.days') OR ", day)
}
// 마지막 OR 제거
condition = strings.TrimSuffix(condition, " OR ")
base.Where(condition)
이런 느낌으로 ...
아무래도 ... 방법이 없다.
'Web > GoLang' 카테고리의 다른 글
[golang] 사이트 모음, 참고자료, 리마인드 자료 (0) | 2024.05.07 |
---|---|
golang 책 원본 Zhihu 지후 (질문답변사이트) (0) | 2024.03.21 |
[golang] time 타입 parsing 오류 , gorm bodyparse 해결방안 (0) | 2023.09.01 |
[golang] stringer 열거형이나 const 일때 자동으로 tostring 할수 있는 제터레이터 auto-generate Stringer tool of Golang (0) | 2023.08.22 |
[golang] time 타입 parsing 오류 (parsing time "~~~" as "~~~": cannot parse "~~~" as "~~~") (0) | 2023.08.22 |
댓글