通过发生订购结果

时间:2011-06-12 20:06:48

标签: mysql sql sql-order-by popularity

我有以下两张表。

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

目前,我正在选择具有相应BookmarkID的所有标签。问题是我只想选择一次标记以避免重复结果,并且只返回最常出现的标记。

这是我当前的SQL查询:

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

2 个答案:

答案 0 :(得分: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

为了使每个标记的结果唯一,请在tagid上执行group by 然后,您可以使用count(*)来order by出现,以查看具有最高出现次数的标记浮动到顶部。
(尝试始终使用count(*)因为它比count(afield)更快

答案 1 :(得分: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或任何其他数字。我的版本将按其受欢迎程度的降序生成所有内容。