2011-11-25 259 views
2

我有兩個表組成文章內容的全文索引用於搜索目的。其中一個表只是與某個單詞關聯的主鍵,而另一個表記錄其發生的文章及其在文檔中的位置。一個單詞可能會出現在具有不同位置的同一個文檔中多次,因此word_locations表中可能出現多次相同的單詞ID。從一個表與另一個ID的MySQL連接計數

這裏有結構:

話:

id   bigint 
word  tinytext 

word_location:

id   bigint(20) 
wordid  bigint(20) 
location int(11) 
article_id int(11) 

什麼,我需要寫的是,會發現出現的次數爲每個單詞的查詢任何一個檔案。我需要爲沒有出現的wordid保留一個零值,所以我認爲這需要是一個左連接。但是,每當我嘗試添加where查詢來限制文章時,結果集中都不包含任何完全不出現的wordid。

我曾嘗試:

select words.wordid, COUNT(word_location.wordid) as appears from words left join word_location on word.id = word_location.wordid where article_id = %s GROUP BY wordid 

但此查詢不爲不顯示在所有單詞返回零。

如何修改此左連接?

在此先感謝!

EDIT

下面是一個例子數據集和所述結果集的不同的查詢。

實例文章內容:

Bob的餐廳是最好的餐廳更 縣在這裏您可以享受最好的土耳其美食之一。

所以詞彙表,由應用程序,以排除停止字的調整之後,將在其詞彙量爲行BobRestaurantfinestgreatercountyenjoyTurkishcusine。 (我使用這個實際的文章,因爲它是在集中的第一,所以IDS實際出現的整數1開始

由@馬克·班尼斯特提供的查詢會產生這樣的結果集: 的wordID - 詞 - 匹配的字符串

128 clifton 0 
1 bob's 2 
2 restaurant 2 
3 one 1 
4 finest 3 
5 restaurants 2 
6 greater 1 
9 county 1 
12 enjoy 3 
13 turkish 6 
14 cuisine 1 

結果集本身是正確的 - 但id 128沒有出現在文檔中,並且是結果集中出現0的唯一結果。目標是讓整個詞彙表以數字返回(大約2500個不同的單詞)

我原來的問題上述編輯之前的查詢實際上返回了相同的結果集,但根本沒有任何0個發生行。

回答

3

您需要在您的加入條件你的文章的選擇:

select words.wordid, COUNT(word_location.wordid) as appears 
from words 
left join word_location on word.id = word_location.wordid and article_id = ? 
GROUP BY wordid 

包括WHERE子句中有效地把你的左連接返回到內連接上的article_id的限制。

+0

我想我明白你的意思,但這個查詢似乎只產生一個零數量的結果,而我似乎無法確定爲什麼那個特定的返回。除此之外,結果集的其餘部分與原始錯誤查詢相同。謝謝! – DeaconDesperado

+0

@DeaconDesperado,你可以在你的問題中包含一些示例數據嗎? –

+0

當然 - 兩個不同查詢返回的一般數據或結果集的示例? – DeaconDesperado

0

位猜測這一個,但我認爲COUNT()只是忽略你的空值,這還不包括他們在到達0(NULL + NULL!= 0)

看那IFNULL()函數,你也許可以做一些事情,如:

COUNT(IFNULL(word_location.wordid, 0))

(免責聲明 - 我更習慣於Oracle的NVL()函數,因此這是一個有點投機!)

1

我會用一個子查詢而不是加入。

SELECT words.id, (SELECT count(*) FROM word_location WHERE word_location.wordid = words.id) as appears 
+0

感謝Ken - 按照如下方式進行了調整,並且返回正確的集合: | SELECT words.id,(SELECT count(*)FROM word_location WHERE word_location.wordid = words.id and word_location.article_id =?) - 仍然想知道這是否可以通過加入來完成。 – DeaconDesperado

相關問題