Как: сопоставить (пространство поиска) с (объединить со столбцом из другой таблицы)

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

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

table searches //список условий поиска, применяемых к корпусам term
...

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

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

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

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

Спасибо! Брайан


person Community    schedule 30.01.2009    source источник
comment
Пожалуйста, опубликуйте более подробную информацию о структуре вашей таблицы, когда вы задаете такие вопросы. SHOW CREATE TABLE корпуса и то же самое для поиска.   -  person Bill Karwin    schedule 30.01.2009


Ответы (1)


Похоже, вам нужно использовать выражение соответствия 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);
person Bill Karwin    schedule 30.01.2009
comment
при дальнейшем рассмотрении это на самом деле не то, что мне нужно - группа concat объединяет все термины в одно целое; мне нужно отличать их друг от друга, поэтому я думаю, что вернулся к исходной точке. спасибо за предложения, хотя. - person Brian Sweeney; 10.02.2009
comment
Когда вы задаете вопросы, стоит четко представлять свои цели. Удачи. - person Bill Karwin; 10.02.2009