2011-06-12 117 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。我的版本将会以其受欢迎程度的降序产生。