mysql의 SET 타입은 여러개의 값을 한번에 가질 수 있는 데이터 타입이다.
예를 들어 [관심분야 : A, B, C, D, E, F, ...] 가 있을 때 (복수선택 가능)
각각을 개별 칼럼에 저장하는 것보다는
하나의 칼럼에 합쳐서 저장하는 것이 검색기능에서 월등히 좋다.
DB에 저장할 경우에는 정수값을 할당하거나 텍스트 'A,C,E' 를 할당할 수 있다.
A = 1
A, B = 1 + 2 = 3
A, B, C = 1 + 2 + 4 = 7
이 값들은 결국 2의 제곱수 즉 bit 값이 된다.
SQL 질의문 예시 : 단순히 질의하는 경우
SELECT col_set FROM tbl_name;
// col_set = "A,B,C"; (문자열)
SELECT col_set+0 AS col_dec FROM tbl_name;
// col_dec = 7; (십진수)
SQL 질의문 예시 : 비트연산으로 조건검색을 하는 경우
SELECT * FROM tbl_name WHERE col_set & 1 > 0; // A를 포함한 경우
SELECT * FROM tbl_name WHERE col_set & 2 > 0; // B를 포함한 경우
SELECT * FROM tbl_name WHERE col_set & 4 > 0; // C를 포함한 경우
SELECT * FROM tbl_name WHERE col_set & 7 > 0; // A+B+C를 포함한 경우
PHP에서 사용하는 경우
if( (7 & 1) > 0 ) // 결과 true
if( (7 & 2) > 0 ) // 결과 true
if( (7 & 8) > 0 ) // 결과 false
* 주의 : 비트연산(&)을 반드시 괄호로 감싸줘야 함
관심분야 선택 기능을 위한 변수 생성
$col_array = array(
1 => 'A',
2 => 'B',
4 => 'C',
8 => 'D',
16 => 'E',
.... (2의 제곱수로 증가함)
);
# 관심분야를 선택하는 화면
foreach($col_array as $key=>$val) {
if( ($db_value_dec & $key) > 0 ) {
// 선택된 상태임
}
}
피드 구독하기:
댓글 (Atom)
[SSL] [letsencrypt] [certbot] 와일드카드 인증서 발급하기
1. 환경 ubuntu 20.x nginx 2. 설치 apt-get install letsencrypt -y 3. 인증서 발급 ; example.com 도메인에 대해 와일드카드 인증서를 발급받는다. certbot certonly --ma...
-
<ul> <li>리스트 : 현재의 SQL문에 조건 추가 (상태처리값에 따른 구분 필요함)</li> <li>삭제 : 개별삭제, 선택삭제, 전체삭제</li> <li>견적...
-
box-shadow: h-offset(오른쪽) v-offset(아래쪽) blur spread color; box-shadow:1px 0 0 0 #aaaaaa; [오른쪽 1px 효과) box-shadow:0 1px 0 0 #aaaaaa; [아래쪽 1...
-
$.validator.setDefaults({ onkeyup: false, onclick: false, onfocusout: false, showErrors: function(errorMap,errorList){ ...
댓글 없음:
댓글 쓰기