0

記事、カテゴリ、タグの3つの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回使用され、tid101は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

デモを見る

結果

| TID | カウント|
---------------
| 200 | 4 |
| 100 | 3 |
| 201 | 2 |
| 101 | 1 |
于 2013-01-17T18:30:42.503 に答える