2011-02-24 3 views
0

테마 갤러리 시스템이 있습니다. 테마 미리보기 페이지에 '관련 테마'항목을 구현해야합니다.관련 결과를 얻기 위해 SQL 쿼리 생성

각 테마는 5 ~ 테이블 그래서 난이, 색상 및 태그가 :

  • 테마

    • id_theme
    • 제목
  • 색상

    • id_color
    • 제목 (빨간색)
  • 태그

    • id_tag ​​
    • 제목 (행성)
  • theme_color

    • id_theme
    • id_color
  • theme_tag

    • id_theme
    • id_tag ​​

캐치, 나는 5 개 결과를받을 수 있고,이다 그들은 그것들을 보여 주어야한다. 색상과 태그 사이에 더 많은 일치가 있습니다. 그 요구 사항으로 어디서부터 시작해야할지 모르겠습니다. 어떤 아이디어?

+0

"색상과 태그가 더 일치합니까?" – Magnus

+0

2 + 3> 0 + 4 – andufo

답변

1

, 당신은 같은 것을 시도 할 수 있습니다 :

DECLARE @target_id_theme INT; 
SET @target_id_theme = 1; -- this is the id_theme you want to find similar themes for 

SELECT t.id_theme, COUNT(*) as matching_things 
FROM theme AS t 
LEFT OUTER JOIN theme_color AS tc ON tc.id_theme = t.id_theme 
LEFT OUTER JOIN theme_tag AS tt ON tt.id_theme = t.id_theme 
WHERE tc.id_color IN (SELECT id_color FROM theme_color WHERE id_theme = @target_id_theme) 
OR tt.id_tag IN (SELECT id_tag FROM theme_tag WHERE id_theme = @target_id_theme) 
GROUP BY t.id_theme 
ORDER BY COUNT(*) DESC 
LIMIT 5 

테스트되지 않음을, 구매자는 조심 ,하지만 당신이 그 아이디어를 얻길 바랍니다. 이렇게하면 @target_id_theme에 지정된 색상이나 태그와 일치하는 모든 색상이나 태그에 대한 행이 만들어지고 그 수가 내림차순으로 계산되어 상위 5 점이됩니다.

+0

은 완벽하게 작동했습니다 (약간의 수정이있었습니다). 당신의 도움을 주셔서 감사합니다! – andufo

0

이 시도 : 주어진 주제에 공통적으로 대부분의 항목이 다섯 개 가지 테마를 원하는 경우

SELECT * FROM theme t 
    FULL OUTER JOIN theme_color tc ON tc.id_theme = t.id_theme 
    INNER JOIN color c ON c.id_color = tc.id_color 
    FULL OUTER JOIN theme_tag tt ON tt.id_theme = t.id_theme 
    INNER JOIN tag ta ON ta.id_tag = tt.id_tag 
WHERE tag LIKE '%' + @KEYWORD + '%' OR color LIKE '%' + @KEYWORD + '%' OR title LIKE '%' + @KEYWORD + '%' 
+0

안녕하세요, 포스트 덕분에 앤드류의 솔루션 덕분에 '2 태그와 3 색'일치가 '0 태그와 4 색'일치를 이길 것이라는 의미입니다. . 태그/색상 확인은 ID로 합산되고 필터링되어야합니다. – andufo

관련 문제