0

このような製品テーブルを取得しました

id   |   name   | category 
--------------------------
1    |   name1  |  2,1,5,8,9
2    |   name2  |  2,1
3    |   name3  |  5,8

そして、このようなカテゴリテーブルを取得しました

id   |   catname   
----------------
1    |   cat_name1  
2    |   cat_name2  
5    |   cat_name3 
8    |   cat_name3 
9    |   cat_name3 

各製品には複数のカテゴリを含めることができます。その製品に関連付けられたカテゴリは、製品テーブルの「カテゴリ」という名前の行に「1,5,8,7」として保存されます。ここで、それぞれがカテゴリ テーブルの ID を表します。

ここで、特定のカテゴリに属する​​すべての製品を表示したいと考えています。

これを処理するためのクエリと少し混乱しています。

そして、これはそのようなタイプのデータを保存するための正しいフォーマットですか? ご意見をお聞かせください

4

4 に答える 4

4

関連付けテーブル:product-categoryを使用すると、必要なクエリが簡略化されます。

列(prod_id、cat_id)を持つProductCategoryテーブルを想定すると、クエリ(カテゴリの名前に基づく)は次のようになります。

  SELECT p.name FROM products p,product_category pc ,category c
  WHERE c.name='your_categ' 
  AND c.id = pc.categ_id
  AND p.id = pc.prod_id
于 2012-08-17T13:12:37.207 に答える
3

製品カテゴリのマッピング用に追加のテーブルを追加します。

SELECT p.name 
 FROM products p 
   JOIN product_category pc ON  p.id=pc.prod_id 
   JOIN Category c ON c.id = pc.categ_id
 WHERE c.name='Category' 
于 2012-08-17T13:08:14.190 に答える
2

いいえ、これは製品カテゴリを保存する正しい方法ではありません。テーブルは 3NF に従って正規化されていません。製品は多くのカテゴリに属する​​ことができ、カテゴリは多くの製品に割り当てられるため、M:N (多対多) テーブルが必要です。products_categories(prod_id, categ_id)代わりにこのテーブルを検索してください。

于 2012-08-17T13:10:24.180 に答える
1
SELECT * 
FROM products 
WHERE 
    category LIKE "ID,%" OR 
    category LIKE "%,ID,%" OR 
    category LIKE "%,ID" 

上記のクエリは機能するはずです-他の人がテーブルをリンクすることが唯一の方法であると示唆しているので、パフォーマンスの問題に注意してください。

于 2012-08-17T13:19:50.603 に答える