2008-11-25 42 views
1

我們曾經有過一次搜索,它會爲某些單詞檢查兩列。兩列都必須包含一些提供的單詞,所以我們使用AND ...毫無疑問在列上使用FULLTEXT INDEX。是否有可能使用CONTAINSTABLE在列1中搜索「word1」並在列2中搜索「word2」

的選擇或多或少是這樣的:

SELECT 
    * 
FROM SomeTable 
WHERE (CONTAINS(Column1, 'word1 OR word2') AND CONTAINS(Column2, 'word3 OR word4')) 

現在我們需要添加對排名的結果。我們想要使用CONTAINSTABLE功能......只有一列很簡單。喜歡的東西:

SELECT 
    SomeTable.*, 
    tmp.RANK 
FROM SomeTable 
INNER JOIN CONTAINSTABLE(SomeTable, Column1, 'word1 OR word2') as tmp 
ON tmp.[KEY] = SomeTable.ID 

是否有可能與2列做,但考慮到我只需要尋找在列1字1或字詞2(不感興趣,如果我們有COLUMN2字詞1或字詞2)。還要考慮AND在哪裏。有什麼樣:

SELECT 
    SomeTable.*, 
    tmp.RANK 
FROM SomeTable 
INNER JOIN CONTAINSTABLE(SomeTable, (Column1, Column2), 'column1:(word1 OR word2) AND column2:(word3 OR word4)') as tmp 
ON tmp.[KEY] = SomeTable.ID 

回答

2

您可以用內做到這一點參加的第二CONTAINSTABLE,雖然你可能想要做的東西有點票友比增加的行列一起,因爲我有樣品

SELECT 
    SomeTable.*,  
    col1.RANK + col2.RANK 
FROM 
    SomeTable 
INNER JOIN CONTAINSTABLE(SomeTable, Column1, 'word1 OR word2') as col1 ON 
    col1.[KEY] = SomeTable.ID 
INNER JOIN CONTAINSTABLE(SomeTable, Column2, 'word3 OR word4') as col2 ON 
    col2.[KEY] = SomeTable.ID 
+0

我不喜歡多個連接的想法,並使用它你不能設置頂部CONTAINSTABLE(那麼你可能會失去正確的結果)。總結的排名最高值取決於有多少加入。但是......這有效,所以除非有更好的答案,否則我會選擇這個。 – Dandikas 2008-11-25 13:15:51