2011-06-12 120 views
0

我有以下兩張表。按次序排列結果

BookmarkTag(BookmarkID,標籤識別)標籤 (標籤識別,標題)

目前,我選擇用適當的BookmarkID所有標籤。問題是我只想選擇標籤一次,以避免結果重複,也只能帶回發生最多的標籤。

這是我當前的SQL查詢:

SELECT Tag.Title 
FROM `Tag` INNER JOIN BookmarkTag 
WHERE BookmarkTag.BookmarkID = 1 AND Tag.TagID = BookmarkTag.TagID' 

回答

3

你需要把聯接條件在ON子句JOIN關鍵字之後。 不是where條款。
您正在將SQL89與SQL92語法混合使用。這可能工作我還沒有測試,但這是更快。

SELECT Tag.Title 
FROM `Tag` t 
INNER JOIN BookmarkTag b ON (t.tagid = b.tagid) 
WHERE B.BookmarkID = 1 
GROUP BY t.tagid 
ORDER BY count(*) DESC 

爲了使每個標籤的結果獨特,在標籤識別做了group by
然後你可以通過使用count(*)來發現order by使得發生率最高的標籤浮動到頂部。
(嘗試總是使用count(*),因爲它比count(afield)更快)

+0

我收到以下錯誤:#1052 - 組語句中的'tagid'列含糊不清 – ritch 2011-06-12 20:17:19

+0

謝謝,這項工作很好。 – ritch 2011-06-12 20:27:23

1
SELECT t.Title, COUNT(*) AS TitleCount 
FROM BookmarkTag AS bt 
INNER JOIN Tag AS t ON t.TagID = bt.TagID 
GROUP BY t.Title 
ORDER BY TitleCount DESC 

如果你想獲得7點最流行的遊戲,在查詢結束,或任何其他數量的增加LIMIT 7。我的版本將會以其受歡迎程度的降序產生。