我有一個主題畫廊制度。我需要在主題預覽頁面中實現「相關主題」項目。生成SQL查詢來獲取有關結果
每個主題都有顏色和標籤,所以表5間我有:
主題
- id_theme
- 標題
顏色
- id_color
- 標題(紅色)
標籤
- id_tag
- 標題(行星)
theme_color
- id_theme
- id_color
theme_tag
- id_theme
- id_tag
美中不足的是,我只收到5分的結果,他們必須展示那些顏色和標籤之間有更多匹配。有了這個要求,我不知道從哪裏開始。有任何想法嗎?
我有一個主題畫廊制度。我需要在主題預覽頁面中實現「相關主題」項目。生成SQL查詢來獲取有關結果
每個主題都有顏色和標籤,所以表5間我有:
主題
顏色
標籤
theme_color
theme_tag
美中不足的是,我只收到5分的結果,他們必須展示那些顏色和標籤之間有更多匹配。有了這個要求,我不知道從哪裏開始。有任何想法嗎?
如果你想在五大主題有共同的大多數項目與給定的主題,你可以嘗試這樣的:
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名
完美工作(有一些小修改嘿嘿)。謝謝你的幫助! – andufo 2011-02-25 12:31:51
試試這個:
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 + '%'
您好,感謝您的崗位 - 安德魯的解決方案是這一問題更加一致。標籤/顏色檢查必須通過id進行求和和過濾。 – andufo 2011-02-25 12:33:13
「顏色和標籤之間更多的匹配」是什麼意思比? – Magnus 2011-02-24 14:37:10
這意味着一個「2個標籤和3種顏色」比賽會打一個「0標籤和4種顏色」的比賽,因爲2 + 3> 0 + 4 – andufo 2011-02-25 05:47:21