0

我有三个 mysql 表:文章、类别和标签。

我想获取链接到文章的所有类别和标签的列表,并按每个类别和标签的出现次数对它们进行排序。

文章表具有以下列:article_id 和 name

类别和标签表具有以下列:article_id 和 tid。

最终我正在寻找消息。

以下是表格的外观示例:

ARTICLES
article_id   name 
1            Article 1
2            Article 2
3            Article 3
4            Article 4

CATEGORIES
article_id   tid
1            100
2            100
3            100
4            101

TAGS
article_id   tid
1            200
2            200
3            200
4            200
3            201
4            201

我希望看到的是:

RESULTS
tid          count
200          4
100          3
201          2
101          1

因为 tid 200 使用了 4 次,tid 100 使用了 3 次,tid 201 使用了 2 次,tid 101 使用了 1 次。

和想法?

4

1 回答 1

2

假设您永远不会拥有相同tid的内容categories,这将起作用tags

SELECT a.tid, a.count
FROM
  (SELECT tid, COUNT(article_id) AS count
  FROM categories
  GROUP BY tid
  UNION ALL
  SELECT tid, COUNT(article_id) AS count
  FROM tags
  GROUP BY tid) a
ORDER BY a.count DESC

查看演示

如果你可能有重复,使用这个:

SELECT a.tid, COUNT(article_id) AS count
FROM
  (SELECT tid, article_id 
  FROM categories
  UNION ALL
  SELECT tid, article_id
  FROM tags) a
GROUP BY a.tid
ORDER BY COUNT(article_id) DESC

查看演示

结果

| 时间 | 计数 |
---------------
| 200 | 4 |
| 100 | 3 |
| 201 | 2 |
| 101 | 1 |
于 2013-01-17T18:30:42.503 回答