- ベストアンサー
MySQLのビット演算
いつもお世話になっております。 PHPとMySQLでアプリケーションの作成をしています。 MySQLでのビット計算で検索結果を表示しようとしています。 ■PHPファイルにはチェックボックスで、約70個の項目が表示されています。 ■データベースには「0」と「1」で以下のように登録されています。 00011・・・・・1110 ■チェックされた場合は「1」、チェックされていない場合は「0」 PHPファイルからsubmitされたときに、↑の条件でデータを生成します。 ■一致したものが1つでもあれば検索結果に表示します。 00011・・・・・1110(データベースのデータ) &00010・・・・・0000(submitされたデータ) ------------------------ 00010・・・・・0000 上記のようにしたい場合、SQL文はどのように記述したらよろしいでしょうか。 ご教示よろしくお願いいたします。 <環境> MySQL:4.1.20 PHP:4.3.9
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単純に考えれば、ビットを使ったSQLを考えるより 正規化してビットのたつ項目にだけフラグを立てるテーブルを 用意しておきinner joinしてやるのがもっともSQLらしいまっとうな やり方だと思いますがどうでしょう?
その他の回答 (1)
- spieder
- ベストアンサー率59% (13/22)
64個までしか指定できないので少し役不足ですが、SET型というのが、ちょうどBITフラグの考え方をした型です。 http://dev.mysql.com/doc/refman/5.1/ja/string-type-overview.html 計算自体は"FIND_IN_SET"を使えば簡単に実装できると思います。 http://dev.mysql.com/doc/refman/5.1/ja/string-functions.html ただ、他のRDBMSでも使えるような汎用的な型ではないので開発するメンバーのスキルレベル等を考えれば、単純に70個カラムを用意してやることをお勧めしますけどね。
お礼
spieder さん、ご回答ありがとうございます。 今回は別の方法でやることにしました。 今後の参考にさせていただきます。 ありがとうございました。
お礼
yambejp さん、遅くなりましたがご回答ありがとうございます。 やはりその方がいいかと思い、ご提案いただいた方法にいたしました。 ありがとうございます。