我对SQL查询很糟糕,所以这可能是一个愚蠢的问题。但是,这里大致是我想做的事情:
表语料库//我想搜索的东西 标题 身体 ...
表搜索//要应用于语料库的搜索词列表 长期
...
我想写的查询或多或少如下:我相信我需要某种联接,但我不确定如何做到这一点。另外,我不确定against()运算符会从文字中除外 - 文档似乎没有提到任何一种方式。
从匹配的语料库中选择* (标题,正文)反对(选择术语 来自搜索);
我正在使用MySQL 5
非常感谢任何想法。
谢谢! 布赖恩
答案 0 :(得分: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);