【发布时间】:2017-06-12 12:20:51
【问题描述】:
我有以下表格
文档
- docid (PK)
- 网址
wdata
- wordid (PK)
- 字
标题
- wordid
- 文档
(wordid & docid 组合唯一)
wurl
- wordid
- 文档
(wordid & docid 组合唯一)
为了搜索任何短语,我将其分解为单词并获取其wordid。表wtitle,wurl 将用于对行进行评分以进行排名。我打算添加更多用于评分的表,例如 inlink 、 inh1 标记等。但是我在为搜索词构建我的 sql 查询时遇到问题。
我的 SQL 查询是这样的
SELECT d.docid,furl,IF(t.wordid IS NULL,0,1) AS intitle,IF(u.wordid IS NULL,0,1) AS inurl FROM document d
LEFT JOIN wtitle t ON t.docid=d.docid
LEFT JOIN wdata w ON w.wordid=t.wordid
LEFT JOIN wurl u ON u.wordid=w.wordid AND u.docid=d.docid
WHERE w.wordid IN (wordid1,wordid2,wordid3)
我有以下疑问
- 如何检查每个表
wtitle和wurl两者甚至更多,因为目前它正在搜索 wtitle 中的第一个,因为 LEFT JOIN 并且其他连接被忽略了? -
如何正确地构建这个 SQL 查询?
Wordid 3 在 URL 中,但不在 Docid 2 的标题中
Wordid 3 不在 URL 中,而是在 Docid 3 的标题中
我想同时返回 doc 2 和 3,但是因为它首先通过 wtitle 连接它忽略(使用第一个查询数据)其他连接
【问题讨论】:
-
可以帮助您的是创建一些简短的测试数据并自己验证。看看你能不能得到匹配的值。
-
注意
LEFT JOIN w ... WHERE w = ...和INNER JOIN w...一样 -
-
已添加文件,现在有人可以帮忙!