0

このように想像してみてください。私のデータベースには、次のflagsようなデータが追加または削除されるというフィールドがあります。

UPDATE people SET flags=flags|16 WHERE ....
UPDATE people SET flags=flags|128 WHERE ....
UPDATE people SET flags=flags&~16 WHERE ....
UPDATE people SET flags=flags&~128 WHERE ....

たとえば、このフィールドは65536以下のような値を持つことができます。私の質問は-PHPコードを使用してこのフィールドから特定のフラグを取得する方法は?私はこのようなものを意味します:

SELECT * FROM people WHERE flags=16;

しかし、結果はフィールドに16番だけでなく、フラグ65536の人、16の人、2または1の人ではないすべての人を返します。SELECTここで、phpコードまたは統合された特定のPHPでどのクエリを使用する必要がありますか関数?ありがとうございました。

4

2 に答える 2

2

がビットフィールドflagsであり、ビット#4(10000)が設定されている行を選択するとします。

SELECT * FROM people WHERE flags & 16;

ただし、これは理想的ではありません。DBが適しているすべての参照機能を失っているからです。

必要なのは2つの新しいテーブルです。flagsおよびpeople_flags。前者にはすべてのフラグが含まれています(idnameで十分です)。後者には列が含まれ、多対多の関係が作成flag_idます(ジャンクションテーブルを参照)。people_id

于 2012-06-25T01:53:17.967 に答える
0

ただし、ロジックは正しくありません。一意ではないとして16を含むフラグを1つだけ持つことはできません。

この行のDBがあるとしましょう

name:Jhon tel:012345 email:test@test.com flags:16
name:Mike tel:012344 email:mike@test.com flags:16
name:Sarah tel:012346 email:sarah@test.com flags:2442

Selectステートメントを使用してこのテーブルからフラグ16を選択するには、Distinctを使用するか、フラグを一意にすることができる2行のデータを取得します。

于 2012-06-25T01:50:27.767 に答える