0

我有以下两张表。

BookmarkTag ( BookmarkID, TagID ) 标签 ( TagID, Title)

目前,我正在选择具有适当 BookmarkID 的所有标签。问题是我只想选择一次标签以避免结果重复,并且只带回出现次数最多的标签。

这是我当前的 SQL 查询:

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

2 回答 2

3

您需要将连接条件放在关键字ON后面的子句中。不在条款中。 您将 SQL89 与 SQL92 语法混合在一起。这可能有效,我还没有测试过,但这更快。JOINwhere

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在 tagid 上执行。
然后,您可以order by使用 count(*) 来查看使出现次数最多的标签浮动到顶部。
(尝试始终使用count(*),因为它比 快count(afield)

于 2011-06-12T20:10:17.427 回答
2
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请在查询末尾添加,或任何其他数字。我的版本将按受欢迎程度的降序生成所有内容。

于 2011-06-12T20:22:53.570 回答