2011-10-12 31 views
0

所以很快問題:我正在爲我的網站添加「相關帖子」,使用我自己構建的自定義CMS。現在我試圖在單個SQL查詢中完成它,它將返回3個最重要的結果。我不使用標籤順便說一句。這就是我到目前爲止所做的,並且取得了不錯的結果,但我想以某種方式優先考慮標題與描述中出現的關鍵字。任何人都可以想到更好的方法?在數據庫中查找「相關帖子」

SELECT * FROM db WHERE title LIKE "%keyword1%" OR title LIKE "%keyword2%" OR description LIKE "%keyword1%" OR description LIKE "%keyword2%" LIMIT 3; 

回答

0

UNION將兩個內部SELECT一起使用,一個用於關鍵字匹配,另一個用於描述匹配。在這些內部SELECT中的每一箇中,分配一個新的priority列,其中關鍵字SELECT爲值1,描述SELECT爲2。

然後,從UNIONed結果中,選擇前3位ORDER BY priority

我會給你的數據庫/數據的一個例子,除非你沒有提供關於你正在使用的數據庫或你的數據是什麼樣子的提示。

+0

這是SQLite和每個條目是一個職位..與標題,說明等 – Dendory

0

如果您想確定優先級,您可以爲每個LIKE匹配分配一些權重。事情是這樣的:

SELECT TOP 3 * FROM 
(
    SELECT *, 1 'Weight' FROM db WHERE title LIKE '%keyword1' OR title LIKE '%keyword2' 
    UNION 
    SELECT *, 2 'Weight' FROM db WHERE description LIKE '%keyword1' OR description LIKE '%keyword2' 
)T1 
ORDER BY Weight ASC 
1

您可以使用「案例」

SELECT *, case WHEN title like '%keyword1%' or title like '%keyword2%' THEN 1 
    ELSE 0 END as Priority 
FROM db WHERE title LIKE '%keyword1%' OR title LIKE '%keyword2%' OR description LIKE '%keyword1%' OR description LIKE '%keyword2%' LIMIT 3 Order by Priority desc 

因此,如果標題中包含關鍵字設置Priority 1去做,否則設置爲0,然後通過Priority

0
訂購吧

如果您碰巧使用Oracle DB,那麼您可以使用Oracle Text查詢非常有效地完成這類事情。它會讓您根據關鍵字的相關性對結果進行排名。