2011-10-12 3 views
0

빠른 질문 : 내가 작성한 사용자 정의 CMS를 사용하여 내 사이트에 "관련 게시물"을 추가하려고합니다. 지금 당장은 3 개의 최상위 결과를 반환하는 단일 SQL 쿼리로 처리하려고합니다. 나는 태그 btw를 사용하지 않는다. 이것이 내가 지금까지 생각해 낸 것이고, 괜찮은 결과를 보여주고 있지만 제목과 설명에 나타나는 키워드의 우선 순위를 어떻게 든 정하고 싶습니다. 누구나 더 나은 방법을 생각할 수 있습니까?데이터베이스의 "관련 게시물"찾기

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를 지정합니다.

그런 다음 UNION 결과에서 상위 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

당신은 "사건"그래서 제목이 키워드가 1 Priority 설정이 포함 된 경우

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 

함께 할 수 있고, 그렇지 않으면 다음 0으로 설정하고 Priority

0
하여 주문

Oracle DB를 사용하는 경우 Oracle Text 쿼리를 사용하면 이러한 종류의 작업을 매우 효율적으로 수행 할 수 있습니다. 키워드 관련성에 따라 결과 순위를 매길 수 있습니다.