У меня есть таблица PRODUCTS
, и у каждого продукта может быть несколько атрибутов, поэтому у меня есть таблица ATTRIBUTES
и еще одна таблица с именем ATTRIBPRODUCTS
, которая находится посередине. Атрибуты сгруппированы по классам (тип, марка, материал, цвет и т. Д.), Поэтому людям может потребоваться продукт определенного типа от определенного бренда.
PRODUCTS
product_id
product_name
ATTRIBUTES
attribute_id
attribute_name
attribute_class
ATTRIBPRODUCTS
attribute_id
product_id
Когда кто-то ищет продукт, он может выбрать один или несколько атрибутов. У меня проблема с возвратом одного продукта, который имеет несколько атрибутов. Это должно быть очень просто, я знаю, но SQL на самом деле не мое, и после определенного момента я немного теряюсь в логике. Проблема в том, что я пытаюсь проверить каждый класс атрибутов отдельно, поэтому я хочу получить что-то вроде:
SELECT DISTINCT products.product_id
FROM attribproducts
INNER JOIN products ON attribproducts.product_id = products.product_id
WHERE (attribproducts.attribute_id IN (9,10,11)
AND attribproducts.attribute_id IN (60,61))
Я использовал IN для разделения блоков атрибутов разных классов, поэтому я получаю продукты определенного типа, но также и определенных брендов. Судя по результатам, которые у меня были, кажется, что AND между операторами IN вызывает проблему.
Кто-нибудь может немного помочь? К сожалению, я не могу позволить себе полную реорганизацию базы данных, в этом есть что-то большее, чем этот бит, поэтому любые предложения о том, как работать с тем, что у меня есть, будут с благодарностью приняты.