从两个表中排序SQL结果

时间:2011-02-17 22:32:45

标签: php sql mysql sorting

我有两个表,tagscoupon_tagstags包含tagNametagID。每个唯一名称都有唯一的ID。例如,标记foo可能包含tagID 1

然后coupon_tags有一堆couponID和一堆tagID。每个标签每个优惠券有一行。当然,优惠券可能有多个标签。该表可能如下所示:

tagID | couponID
  5        3
  4        3
  9        3
  5        6

我要做的是获得前10个最常用的标签。我没有排序algos或重SQL的经验,所以我不确定如何开始。有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

这样做:

 SELECT tagID, count(*) as TotalOccurrences from coupon_tags
    group by tagID
    order by TotalOccurrences DESC
    limit 10

这将为您提供最常用的标签ID。

答案 1 :(得分:0)

使用LIMIT仅返回10行,并使用ORDER BY .. DESC获取最大值,并使用GROUP BY将标记统计在一起。

select t.tagID, t.tagName, count(*) as TimesUsed
from coupon_tags c
inner join tags t on t.tagID = c.tagID
group by t.tagID, t.tagName
order by TimesUsed DESC
limit 10;

请注意,如果第10个或更高的地方有联系,例如3 x 9或2 x 10,LIMIT 10将仅显示其中一个(随机)。如果您需要显示延伸到第11个点或更高点的关系,则需要复杂的查询。处理这个问题的一个更好的选择是获得前15名,然后在编程前端,进一步超过10,直到TimesUsed值发生变化。

答案 2 :(得分:0)

这个怎么样?

SELECT * FROM (
  SELECT T.tagID, 
         count(*) AS numerOfTags
    FROM tags AS T
    JOIN coupon_tags AS C
      ON C.tagID = T.tagID
   GROUP BY T.tagID
  )
 ORDER BY numerOfTags DESC
 LIMIT 10