我有一个小商店系统,现在我想选择一些具有特定属性和条件的产品。
这是我的设置:
表XYZ:
所以现在我想选择所有具有属性-id 1,3,5和7但不是9和2的产品。
我怎么能以一种简单的方式做到这一点,我的第一个想法是按产品ID和group_concat对attribute_ids进行分组,并使用“having”来包含和排除我想要的属性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 :(得分:0)
也许这会有所帮助?
SELECT product_id FROM table_XYZ WHERE attribute_id IN(1,3,5,7);
或者,如果您有更多的ID以及仅排除少数的内容:
SELECT product_id FROM table_XYZ WHERE attribute_id NOT IN(2,9);