Как выполнить левое соединение с условиями полнотекстового поиска и вернуть все наборы данных? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь выполнить полнотекстовый поиск по нескольким таблицам продуктов;как имя производителя, название модели продукта, название категории продукта и т. д.

Я использую MariaDB 10.3, полный текст был включен для всех соответствующих столбцов * .name, и я использую движок innodb

SELECT f.id AS family_id,
       f.name AS family_name,
       mr.id AS manufacturer_id,
       mr.name AS manufacturer_name,
       mm.id AS model_id,
       mm.name AS model_name,
       mm.year AS model_year
FROM   product_manufacturer mr 
    LEFT JOIN product_family f ON
       f.manufacturer_id=mr.id
    LEFT JOIN `product_model` mm ON
       f.id=mm.product_family_id
WHERE 
    MATCH (mr.name) AGAINST ('TestProduct'  IN NATURAL LANGUAGE MODE)

^^ Это работает

Но если бы я начал добавлять условия ИЛИ или начать поиск по объединенным столбцам, я получал бы весь набор данных, как если бы вообще не было условий, как показано в 2 запросах ниже

SELECT f.id AS family_id,
       f.name AS family_name,
       mr.id AS manufacturer_id,
       mr.name AS manufacturer_name,
       mm.id AS model_id,
       mm.name AS model_name,
       mm.year AS model_year
FROM product_manufacturer mr 
    LEFT JOIN product_family f ON
       f.manufacturer_id=mr.id
    LEFT JOIN `product_model` mm ON
       f.id=mm.product_family_id
WHERE
    MATCH (mr.name) AGAINST ('TestProduct'  IN NATURAL LANGUAGE MODE)
SELECT f.id as family_id,
       f.name as family_name,
       mr.id as manufacturer_id,
       mr.name as manufacturer_name,
       mm.id as model_id,
       mm.name as model_name,
       mm.year as model_year 
FROM product_manufacturer mr
   LEFT JOIN product_family f on
       f.manufacturer_id=mr.id
   LEFT JOIN `product_model` mm on
       f.id=mm.product_family_id
WHERE
   MATCH (mm.name) AGAINST ('TestProduct'  IN NATURAL LANGUAGE MODE)
OR MATCH (mr.name) AGAINST ('TestProduct'  IN NATURAL LANGUAGE MODE)
...