2

私のMySQLproductsテーブルには、製品が属するグループと呼ばれる列があります。この列に実際に格納されているのは、 という別のテーブルの IDgroupsです。

特定のグループに属する製品を選択したい場合はどうすればよいですか?

製品が 1 つのグループにのみ属することができる場合は、単純に次のように使用できます。

where group={groupid}

しかし、製品が複数のグループに属することができる場合はどうなるでしょうか?

「 4,8,10,42 」のように格納できます。これらの数字はそれぞれgroupIDを意味します。しかし、その後、どのように選択を照会しますか?

4

3 に答える 3

3

製品のリストを 1 つのフィールドに格納しないでください。列の代わりに、製品とグループ間の各関連付けを格納products.groupsする個別のテーブルが必要です。product_groups (product_id, group_id)次に、次のようにグループからすべての製品を選択できます。

SELECT product.*
FROM product_groups
INNER JOIN products ON (products.id = product_groups.product_id)
WHERE product_groups.group_id = :group_id`
于 2012-09-16T09:29:26.040 に答える
1

製品に複数のグループを持たせたい場合は、データベース構造をここで確認する必要があります。製品とグループが接続する 3 番目のテーブルを作成する必要があります。次に、製品 ID をグループ ID にマッピングするだけです。

製品が 1 つのグループのみに属している場合、このテーブルには 1 つのエントリしかありませんが、複数のグループに属している場合は (最終的に) 複数のエントリがあります。

于 2012-09-16T09:30:59.647 に答える
1

「4,8,10,42」のように保存できます。

いいえ、そうしないでください!

結合テーブルと呼ばれる、多対多のリレーションシップを作成するための、完全によく知られた、標準的で、効率的で、十分にテストされたベスト プラクティスがあります。結合テーブルを使用して、製品 1 がグループ 4、8、10、および 42 のメンバーであることを表す方法を次に示します。

product_group
product    group
1          4
1          8
1          10
1          42
于 2012-09-16T09:31:07.507 に答える