2013-07-02 41 views
0

我正在閱讀的書Programming Collective Intelligence所有的例子都是在Python和sqllite中完成的。不過,我正在做PHP/MYSQL中的所有示例。從編程集體智慧第4章中,這個查詢的MySQL等價物是什麼?

第4章第63和64頁討論如何檢索搜索結果。具體來說,它將檢索相關文本包含搜索短語中所有單詞的文檔ID,並將該ID與每個單詞在文本中的位置一起返回。

幸運的是,這些頁面和代碼是available online for free for reference.這裏是從第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,以及如何動態地構造它,我不會有問題產生的PHP代碼爲getmatchrows()功能。但是,如果您對與SQL查詢相關的getmatchrows PHP定義有一個建議,請分享一下。

+3

該查詢將與MySQL一起工作就好了。 – Barmar

+0

嗯,我不斷收到MySQL錯誤,我真的不明白這一點。讓我再次檢查我的代碼。 – user658182

回答

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 
+0

感謝您的回答。我相信我的問題可能會更清楚。您能否解釋一下查詢和聯接條款中發生了什麼?我想我明白我選擇id的位置,然後是單詞one和單詞two的位置。但是,如果我在搜索詞中有5個詞,會發生什麼? 「選擇w0.urlid,w0.loc,w1.loc,w2.loc等」但是這會如何影響join子句? – user658182

+0

我已經顯示了5個單詞的查詢,所以你看到的模式?如果你打算使用SQL,也許你應該去找一個教程? – Barmar

+0

感謝您的編輯。找到一個教程的問題是,我不知道我甚至應該尋找什麼來尋找。如果你有一個教程,你想建議或要搜索什麼條款,以更好地瞭解這個SQL中發生了什麼,然後請分享。再次感謝! – user658182

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查詢,並應工作正好。

相關問題