Как: сопоставить (пространство поиска) с (объединить с колонкой из другой таблицы) - PullRequest
1 голос
/ 30 января 2009

Я паршив в запросах SQL, так что это может быть глупый вопрос. Тем не менее, вот примерно то, что я хотел бы сделать:

таблицы корпусов // вещи, которые я хотел бы найти через заглавие тело ...

поиск в таблице // список условий поиска, которые будут применены к корпусам Термин
...

Запрос, который я хотел бы написать, выглядит примерно так: я считаю, что мне нужно какое-то соединение, но я не уверен, как это сделать. Кроме того, я не уверен, что оператор против () будет принимать что-либо, кроме литерала - документы, похоже, не упоминали ни о каком другом.

выбрать * из корпусов, где совпадают (название, тело) против (выберите термин из поисков);

Я использую MySQL 5

Любые мысли очень ценятся.

Спасибо! Brian

1 Ответ

1 голос
/ 30 января 2009

Звучит так, как будто вам нужно использовать выражение соответствия FULLTEXT в вашем условии соединения.

Я никогда не использовал полнотекстовое совпадение в условии соединения, поэтому я не уверен, что это сработает, но гипотетически это может сделать это:

SELECT DISTINCT c.*
FROM corpuses c JOIN searches s 
  ON (MATCH(c.title, c.body) AGAINST (s.term));

Хорошо, я попробовал это, используя ваши определения таблиц и некоторые примеры данных из руководства MySQL. Вот запрос, который работает (протестировано с MySQL 5.1.30):

SELECT *
FROM corpuses 
WHERE MATCH(title, body)
  AGAINST ( (SELECT GROUP_CONCAT(term SEPARATOR ' ') FROM searches) 
    IN BOOLEAN MODE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...