https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html говорит:
MATCH () принимает список через запятую, в котором указаны столбцы для поиска.
By пытаясь использовать COALESCE (), вы передаете строковое выражение в MATCH (), а не идентификаторы столбца.
Это не сработает.
Повторный комментарий:
MATCH(title_translations.title,collection.title)
не будет работать в любом случае, потому что перечисленные вами столбцы должны принадлежать одному полнотекстовому индексу, а каждый индекс принадлежит одной таблице. Вы не можете перечислить столбцы из разных таблиц. Также вы должны перечислить все определенные столбцы, если вы определили полнотекстовый индекс из нескольких столбцов.
Полагаю, в вашем случае у вас есть один полнотекстовый индекс, определенный для одного столбца title
в каждой таблице.
Вам понадобится:
WHERE MATCH(title_translations.title) AGAINST('string')
OR MATCH(collection.title) AGAINST('string')
Вы Вы должны сделать это в двух подходящих терминах, поэтому вы должны повторять ПРОТИВ каждого термина.
Но я не уверен, что это соответствует вашим намерениям. Это не ясно из вашего исходного вопроса.
Повторное разъяснение:
Если заголовок существует в title_translations, строка должна быть сопоставлена с title_translations.title и только против этого. Если заголовок не существует в title_translations, необходимо сопоставить строку с collection.title
Вот что я придумаю:
SELECT x.title FROM
(
SELECT IF(t.title IS NOT NULL,
IF(MATCH(t.title) AGAINST('string') > 0, t.title, NULL),
IF(MATCH(c.title) AGAINST('string') > 0, c.title, NULL)
) AS title
FROM collection AS c
LEFT OUTER JOIN title_translations AS t
ON t.ref_collection = c.id
) AS x
WHERE x.title IS NOT NULL