Mysql ビット演算子で検索

パーミッションみたいなbit演算で「〇〇を含む」ようなことを条件にしたい。

作成日:2018-08-09, 更新日:2023-10-18

基本

select * from 〇〇〇 where 〇〇&〇〇

▼「カラム:group」と「2」の「ビット積」が「真」になるレコード取得

select * from 〇〇〇 where `group`&2;

パーミッションを表した下記のようなテーブルがあるとして・・・「書き込み権限(w)を含むレコードを取得したい」ってコトをする場合。

name permission
---(000) 0
--r(001) 1
-w-(010) 2
x--(100) 3
-wr(011) 4
x-r(101) 5
xwr(111) 6

▼クエリ

select * from 〇〇〇 where `permission`&2;

→「-w-(010)」「-wr(011)」「xwr(111)」が取得される

めも

たとえば、支払い方法が「現金、カード、電子マネー」のどれに対応しているのかってコトをどうにかしたい。

最終的に下記のような「現金」対応している店舗一覧を取得したい。

店舗A 現金
店舗B 現金、カード
店舗D 現金、カード、電子マネー

テーブル構成は色々とあるだろうし、正解は分からないが・・・ビット積が使える

カラム:name カラム:value(1:現金、2:カード、4:電子マネー) コメント(支払方法の対応状況)
店舗A 1 --1:現金
店舗B 3 -11:現金、カード
店舗C 6 11-:カード、電子マネー
店舗D 7 111:現金、カード、電子マネー
店舗E 2 -1-:カード

※このテーブルに支払方法ごとのカラムを持たせる必要がなくなる。

関連項目