Как более общий случай this question, потому что я думаю, что это может представлять интерес для большего числа людей ... Каков наилучший способ выполнить полнотекстовый поиск на двух таблицах? Предположим, что есть три таблицы, одна для программ (с submitter_id) и одна для тегов и описаний с помощью object_id: внешние ключи, относящиеся к записям в программах. Мы хотим, чтобы submitter_id программ с определенным текстом в их тегах или описаниях. Мы должны использовать MATCH AGAINST по причинам, по которым я не буду здесь заниматься. Не зацикливайтесь на этом аспекте.MySQL FULLTEXT Search Across> 1 Таблица
programs
id
submitter_id
tags_programs
object_id
text
descriptions_programs
object_id
text
следующие работы и выполняет в 20мс или так:
SELECT p.submitter_id
FROM programs p
WHERE p.id IN
(SELECT t.object_id
FROM titles_programs t
WHERE MATCH (t.text) AGAINST ('china')
UNION ALL
SELECT d.object_id
FROM descriptions_programs d
WHERE MATCH (d.text) AGAINST ('china'))
, но я попытался переписать это как ПРИСОЕДИНЯЙСЯ следующим образом, и она работает в течение очень долгого времени. Я должен убить его через 60 секунд.
SELECT p.id
FROM descriptions_programs d, tags_programs t, programs p
WHERE (d.object_id=p.id AND MATCH (d.text) AGAINST ('china'))
OR (t.object_id=p.id AND MATCH (t.text) AGAINST ('china'))
Просто из любопытства я заменил OR символом AND. Это также работает за несколько миллисекунд, но это не то, что мне нужно. Что случилось с вышеупомянутым вторым запросом? Я могу жить с UNION и subselects, но я хотел бы понять.
Является ли синтаксис для этого отличным от первого примера? –
Я не следую, Маркус. (a) Как бы вы написали «присоединиться к фильтрам»? и (б) «вы теряете использование вашего полнотекстового индекса. ??? –