Похоже, ваши itemProperties таблица имеет несколько записей для одной и той же «Product_ItemID», и вы ищете что-то, что является как «BrandX», и имеет некоторые «OtherProperty» из другое значение. Чтобы справиться с этим, вы можете использовать эту таблицу TWICE (или больше, если больше значений свойств, которые вас интересуют ... Я бы предложил иметь индекс в вашей таблице Product_ItemProperties по (Product_ItemID, Field, Value), чтобы лучше всего оптимизировать запрос.
Например, вы ищете автомобиль марки «X», а во-вторых, это автомобиль «Blue» (не считая компонент каталога).
Кроме того, обратите внимание, в этом запросе, я даю упрощенный алиасы и квалифицировать каждое поле с псевдонимом. Поэтому нет никакой неопределенности, из которой следует поле.
Внешнее предложение WHERE - это ваши первые критерии, только получите те предметы, которые имеют минимум фирменного наименования fi eld, и оно соответствует ожидаемому значению ... От них снова присоединяются к таблице свойств продукта товара, но для интересующего вас «другого» значения поля и его значения.
Я был не уверен, где компонент cataglog был, но я подозреваю, что это из таблицы продуктов и должен быть настроен с помощью псевдонимов.
SELECT
ByBrand.Product_ItemID,
P.NameOfProduct, (just an example to get this too)
FROM
Product_ItemProperties ByBrand
JOIN Product_Items P
ON ByBrand.Product_ItemID = P.Product_ItemID
JOIN Product_ItemProperties ByOtherField
ON ByBrand.Product_ItemID = ByOtherField.Product_ItemID
AND ByOtherField.Field = 'otherPropertyInterestedIn'
AND MATCH (ByOtherField.Value) against ('otherValueLookingFor' IN BOOLEAN MODE)
WHERE
ByBrand.Product_CatalogueID = 'someCatalogID' (or is this from product_items table)
AND ByBrand.Field = 'brandname'
AND MATCH (ByBrand.Value) against ('brandValueLookingFor' IN BOOLEAN MODE)
Попробуйте положить EXPLAIN перед запросом, чтобы увидеть, что индексы и не используются – Tommassiov
Вы должны разделить больше, чем запрос - как на выходе 'EXPLAIN', таблицы схем, Qty записей/отношения и т. д. – AgRizzo