Вам нужен запрос, который LEFT JOIN
s в каждой таблице, чтобы выполнить поиск с условием, основанным на полнотекстовой функции поиска MATCH
, с предложением WHERE
, чтобы отфильтровать несоответствующие записи.SELECT DISTINCT
гарантирует, что вы не увидите дубликатов.
Нам необходимо вручную настроить критерии JOIN
для каждой таблицы на products
: option_values
является наиболее сложным случаем, поскольку он не ссылается напрямуюproducts
(требуется дополнительное соединение для product_option_values
, псевдоним pov
ниже.
SELECT DISTINCT p.name, p.price
FROM
products p
LEFT JOIN categories c
ON MATCH(c.name) AGAINST('foo' IN NATURAL LANGUAGE MODE)
AND c.id = p.category_id
LEFT JOIN product_types pt
ON MATCH(pt.name) AGAINST('foo' IN NATURAL LANGUAGE MODE)
AND pt.category_id = p.category_id
LEFT JOIN options o
ON MATCH(o.name) AGAINST('foo' IN NATURAL LANGUAGE MODE)
AND o.product_type_id = p.product_type_id
LEFT JOIN product_option_values pov
ON pov.product_id = p.id
LEFT JOIN option_values ov
ON MATCH(ov.name) AGAINST('foo' IN NATURAL LANGUAGE MODE)
AND ov.id = pov.option_value_id
WHERE
COALESCE(c.id, pt.id, o.id, ov.id) IS NOT NULL