Чтобы выполнить поиск в базе данных для строк с двумя ключевыми словами "foo" AND "bar" в любом из столбцов "foo_desc" и "bar_desc", я бы сделал что-то вроде:
SELECT *
FROM t1
WHERE MATCH (t1.foo_desc, t2.bar_desc) AGAINST ('+foo* +bar*' IN BOOLEAN MODE)
или
SELECT *
FROM t1
WHERE (CONCAT(t1.foo_desc, t2.bar_desc) LIKE '%foo%') AND (CONCAT(t1.foo_desc, t2.bar_desc) LIKE '%bar%')
Я ожидаю, что недостатком последнего запроса будет производительность.
Положительный момент заключается в том, что запрос LIKE находит "xxfoo", где MATCH AGAINST не работает.
Какой из них предпочтительнее или есть лучшее решение?