질문/조언질답게시판
Extra Form
PHP PHP 7.4
CMS Rhymix 1.x

라이믹스 XML SQL 쿼리에서 비트연산을 하고 싶습니다

 

SELECT b'1000' & b'1111';

리턴 값: 8 (b'1000')

 

데이터 뽑아올때 쿼리상에서 비트 연산을 거치려고 하는데요, 개발자 문서를 봐도 비트 연산에 ㅂ도 안나와있어서..

 

일단 그냥 & 기호만 쓸 수 있으면 됩니다 (AND 연산)

 

이는 어떻게 구현할 수 있을까요?

 

+) 만약 기능이 없다면, 커스텀 쿼리말고는 답이 없는걸까요?

만약 커스텀 쿼리를 사용해야 한다면 라이믹스 2 말고, 라이믹스 1에서도 사용할 수 있는 방법이 있을까요?

라이믹스 2에서 대폭 개편되서 버전에 따라 코드를 다르게 짜야하는 것은 인지하고 있지만, 글마다 쿼리를 날리는 법이 달라서 헷갈리네요..

  • profile
    $oDB->prefix 존재유무 체크하셔서 있다면 기존방식(_query, _fetch) 이용하시고 이외 경우 라이믹스 2.0부터 정식 지원하는 커스텀 쿼리 이용하시면 될겁니다.
  • profile
    비트 연산을 꼭 DB에서 하셔야 하는 이유가 있나요?

    1. 비트연산 결과를 기준으로 데이터를 검색해서 가져오기 위해?
    → 인덱스를 타지 않으므로 무척 느립니다.

    2. 검색 용도는 아니고, 가져온 데이터를 가공하기 위해?
    → PHP에서 하면 됩니다.
  • profile profile
    데이터는 많아야 1~200개 정도 있고요, WHERE문을 통해서 해당하는 데이터를 가져오기 위해서 입니다

    체크박스 데이터랑 비슷한 방식인데요, 예를 들어 전체적으로 [A,B,C]라는 데이터가 있으면 [A,C]만 선택한 경우를 가져오려고 합니다
    이를 varchar로 저장하면 가장 간단하지만 검색이 쉽지 않아서, int로 저장하고 비트연산을 통해 해당 경우를 가져오려고 합니다

    따로 컬럼으로 분류할까도 생각해봤지만 위 예시처럼 조건이 [A,B,C] 단 세개만 있는게 아니라서 말이죠..
    앞으로도 추가가 될 수 있어서 다른 데이터 저장 방식도 생각해보았지만, 위 방식만큼 간단한 방법이 없네요 ㅜㅜ..
  • profile profile
    int로 저장하고 비트연산으로 101을 검색하든, varchar로 저장하고 LIKE 'Y_Y%'라고 검색하든
    검색 편의나 쿼리 속도면에서 차이는 없을 것 같습니다. 둘 다 테이블 스캔이 필요하지요.
  • profile profile

    비트 연산이 좀 더 처리하기 수월해서 해당 방법으로만 생각했었는데, varchar를 사용해서 저장해도 큰 문제는 없어보이네요
    오히려 경우에 따라 인덱스를 사용할 수도 있으니 더 좋을지도 모르겠네요

    말씀해주신 varchar를 이용하여 저장하는 방법으로 가보겠습니다
    감사합니다!

  • profile profile
    DB 건강에 좋은지 안좋은지는 잘 모르겠습니다만,
    아예 테이블을 하나 새로 만드셔서 다루는 방법도 있습니다.

    (id) (value)
    abc opt1
    abc opt3
    abc opt4 형태로요.

    기존 방식대로면
    (id) (value)
    abc 1011 과 같은 형태였겠죠..?

    데이터가 확 늘어나긴 하겠지만, 인덱스도 깔끔하게 처리가 되지 않을까 싶습니다.
    추후 확장하기도 편할거 같구요.