2012-11-24 94 views
0

我有一個履帶掃描器可以掃描網頁中的所有單詞。然後將每個單詞插入到一個mysql數據庫以及它所屬的URL中。然後,搜索按照在文檔中找到的單詞量進行排序。問題是...如何將多個詞條查詢添加到我現有的查詢中。多項搜索查詢

它是完美的單項查詢,但我想我的查詢,試圖在同一個網頁上查找單詞在一起,如果沒有單詞出現在網頁上,返回該條款爲正常結果。

我的查詢是下面:

  $results = addslashes($_POST['results']); 

       " SELECT p.page_url AS url, 
         COUNT(*) AS occurrences 
         FROM page p, word w, occurrence o 
         WHERE p.page_id = o.page_id AND 
         w.word_id = o.word_id AND 
         w.word_word = \"$keyword\" 
         GROUP BY p.page_id 
         ORDER BY occurrences DESC 
         LIMIT $results" 

回答

0

使用COUNT(DISTINCT ...)來算的每一頁上找到不同單詞的數量,並使用IN找到任何單詞的列表:

SELECT 
    p.page_url AS url, 
    COUNT(DISTINCT w.word_word) AS words_found 
    COUNT(*) AS occurrences 
FROM page p 
JOIN occurrence o ON p.page_id = o.page_id 
JOIN word w ON w.word_id = o.word_id 
WHERE w.word_word IN ('foo', 'bar') 
GROUP BY p.page_id 
ORDER BY occurrences DESC 

如果您希望確保頁面中至少有n個搜索項在頁面上,然後添加HAVING子句:

GROUP BY p.page_id 
HAVING COUNT(DISTINCT w.word_word) >= 2 
ORDER BY occurrences DESC 
+0

我該怎麼把'foo'和'bar'放在哪裏? – user1840291

+0

@ user1840291:這取決於您要搜索的詞。你能給出一個你的用戶可能搜索的具體例子嗎? –

+0

它是一個搜索引擎,馬克,所以我不知道.. – user1840291

0

如果數據庫引擎支持,您可以執行子選擇。例如:

SELECT 
    url, 
    (select count(*) from table where conditions1) as count1, 
    (select count(*) from table where conditions2) as count2 
FROM table