0

我正在阅读Programming Collective Intelligence一书,其中所有示例都是用 Python 和 sqllite 完成的。但是,我在 PHP / MYSQL 中做所有的例子。

第 4 章第 63 和 64 页讨论如何从搜索中检索结果。具体来说,它检索其相关文本包含搜索短语中的所有单词的文档 id,并返回该 id 以及每个单词在文本中的位置。

值得庆幸的是,这些页面和代码可在线免费参考。这是第 64 页的查询:

select w0.urlid,w0.location,w1.location
from wordlocation w0,wordlocation w1
where w0.urlid=w1.urlid
and w0.wordid=10
and w1.wordid=17

这是书中的示例结果集,其中第一个数字是文档的 ID,第二个和第三个数字代表每个单词在该特定文档中的位置。

e.getmatchrows('functional programming')
([(1, 327, 23), (1, 327, 162), (1, 327, 243), (1, 327, 261),
(1, 327, 269), (1, 327, 436), (1, 327, 953),..

我对数据库一无所知,所以这个查询让我有点吃惊。我将如何在 MySQL 中编写它?

我对我的 PHP 很有信心,而且我知道一旦我了解了 SQL 以及如何动态构建它,我就可以毫无问题地为getmatchrows()函数生成 PHP 代码。但是,如果您对 SQL 查询附带的相关 getmatchrows PHP 定义有建议,请分享。

4

2 回答 2

2

该查询将起作用,尽管更现代的语法使用显式连接:

SELECT w0.urlid, w0.location, w1.location
FROM wordlocation w0
JOIN wordlocation w1 ON w0.urlid = w1.urlid
WHERE w0.wordid = 10
AND w1.wordid = 17

更多的话是:

SELECT w0.urlid, w0.location, w1.location, w2.location, w3.location, w4.location
FROM wordlocation w0
JOIN wordlocation w1 ON w0.urlid = w1.urlid
JOIN wordlocation w2 ON w0.urlid = w2.urlid
JOIN wordlocation w3 ON w0.urlid = w3.urlid
JOIN wordlocation w4 ON w0.urlid = w4.urlid
WHERE w0.wordid = 10
AND w1.wordid = 17
AND w2.wordid = 101
AND w3.wordid = 25
AND w4.wordid = 4
于 2013-07-02T02:53:37.517 回答
1
select w0.urlid,w0.location,w1.location
from wordlocation w0,wordlocation w1
where w0.urlid=w1.urlid
and w0.wordid=10
and w1.wordid=17

是一个有效的 mySQL 查询,应该可以正常工作。

于 2013-07-02T02:53:54.620 回答