2016-11-01 14 views
0

私はちょっとしたShop-systemを持っていますが、特定の属性と条件を持つ製品を選択したいと思います。ここで特定の属性で製品を検索

私のセットアップ:

テーブルXYZは:

は、だから今、私は属性のIDを持っているすべての製品を選択するattribute_group_id ATTRIBUTE_ID PRODUCT_ID 1,3,5および7ではなく9および2である。

私は簡単な方法でこれを行うことができます。最初のアイデアは製品IDでグループ化し、attribute_idsをgroup_concatし、必要な属性IDを含めるか除外することでした。

SELECT CONCAT('_',GROUP_CONCAT(attribute_id SEPARATOR '_'),'_') as attrs, 
     product_id 
FROM my_table 
GROUP BY product_id 
HAVING (attrs LIKE '%_1_%' 
     AND attrs LIKE '%_3_%' 
     AND attrs LIKE '%_5_%' 
     AND attrs LIKE '%_7_%') 
AND (attrs NOT LIKE '%_2_%' 
    AND attrs NOT LIKE '%_9_%') 

これは機能しますが、より良い解決法があります。

答えて

0

おそらくこれが役に立ちますか?

SELECT product_id FROM table_XYZ WHERE attribute_id IN(1,3,5,7);

それとも、より多くのIDと何ほんの数を除外するために持っている場合:

をSELECTは、IN(2,9)NOT ATTRIBUTE_ID table_XYZ FROM をPRODUCT_ID。

+0

問題は、私がこれらのattrsをすべて持っている製品を望んでいるということです。あなたのクエリは、これらのattrsのいずれかを持つ各製品を私に与えます。 – marco

関連する問題