1列にユーザーの「役割」が格納されているユーザーのテーブルがあります。特定のユーザーに複数の役割を割り当てることができます。
次に、ロール ID を「ロール」列に格納します。
しかし、使いやすい方法でメモリを節約するために、複数の値を 1 つの列に格納するにはどうすればよいでしょうか? たとえば、コンマ区切りフィールドを使用した保存は簡単ではなく、メモリを消費します。
何か案は?
1列にユーザーの「役割」が格納されているユーザーのテーブルがあります。特定のユーザーに複数の役割を割り当てることができます。
次に、ロール ID を「ロール」列に格納します。
しかし、使いやすい方法でメモリを節約するために、複数の値を 1 つの列に格納するにはどうすればよいでしょうか? たとえば、コンマ区切りフィールドを使用した保存は簡単ではなく、メモリを消費します。
何か案は?
MySQL でビットごとのロジックを使用することもできます。role_id
BASE 2 でなければなりません (0、1、2、4、8、16、32...)
role_id | label
--------+-----------------
1 | Admin
2 | User
4 | Author
user_id | name | role
--------+-----------------
1 | John | 1
2 | Steve | 3
3 | Jack | 6
ビットごとのロジックにより、すべてのユーザー ロールを選択できます
SELECT * FROM users WHERE role & 1
-- returns all Admin users
SELECT * FROM users WHERE role & 5
-- returns all users who are admin or Author because 5 = 1 + 4
SELECT * FROM users WHERE role & 6
-- returns all users who are User or Author because 6 = 2 + 4
あなたの質問から私が得たものは、
テーブルに置く必要があるとします。1 つは「食事」テーブルで、もう 1 つは「combo_meal」テーブルです。ここで、coma[,] を区切らずに、複数の meal_id を 1 つの COMBO_MEAL_ID 内に格納したいと考えています。そして、あなたはそれがあなたのDBをより標準的にすると言った.
私があなたの質問から間違っていない場合は、以下の私の提案を注意深く読んでください。それはあなたを助けるかもしれません。
まず、あなたのコンセプトが正しいかどうかを考えてください。間違いなく、より標準的な DB が提供されます。
このために、これらの 2 つのテーブル データを参照するために、もう 1 つのテーブル [サンプル テーブル: コンボミール_リレーション] を作成する必要があります。目に見える例の1つがそれをクリアするかもしれません。
meal table
+------+--------+-----------+---------+
| id | name | serving | price |
+------+--------+-----------+---------+
| 1 | soup1 | 2 person | 12.50 |
+------+--------+-----------+---------+
| 2 | soup2 | 2 person | 15.50 |
+------+--------+-----------+---------+
| 3 | soup3 | 2 person | 23.00 |
+------+--------+-----------+---------+
| 4 | drink1 | 2 person | 4.50 |
+------+--------+-----------+---------+
| 5 | drink2 | 2 person | 3.50 |
+------+--------+-----------+---------+
| 6 | drink3 | 2 person | 5.50 |
+------+--------+-----------+---------+
| 7 | frui1 | 2 person | 3.00 |
+------+--------+-----------+---------+
| 8 | fruit2 | 2 person | 3.50 |
+------+--------+-----------+---------+
| 9 | fruit3 | 2 person | 4.50 |
+------+--------+-----------+---------+
combo_meal table
+------+--------------+-----------+
| id | combo_name | serving |
+------+--------------+-----------+
| 1 | combo1 | 2 person |
+------+--------------+-----------+
| 2 | combo2 | 2 person |
+------+--------------+-----------+
| 4 | combo3 | 2 person |
+------+--------------+-----------+
combo_meal_relation
+------+--------------+-----------+
| id | combo_meal_id| meal_id |
+------+--------------+-----------+
| 1 | 1 | 1 |
+------+--------------+-----------+
| 2 | 1 | 2 |
+------+--------------+-----------+
| 3 | 1 | 3 |
+------+--------------+-----------+
| 4 | 2 | 4 |
+------+--------------+-----------+
| 5 | 2 | 2 |
+------+--------------+-----------+
| 6 | 2 | 7 |
+------+--------------+-----------+
テーブル内を検索すると、より高速な結果が生成されます。
検索クエリー:
SELECT m.*
FROM combo_meal cm
JOIN meal m
ON m.id = cm.meal_id
WHERE cm.combo_id = 1
うまくいけば、あなたは理解します:)