【问题标题】:MySQL get most popular tags ids combination with their countsMySQL 获取最流行的标签 ID 组合及其计数
【发布时间】:2016-08-09 21:13:16
【问题描述】:

我有三张桌子

1.tbl_tag

id int NOT NULL AI PK
name VARCHAR(50) NOT NULL

内容

id name
1 lifestyle
2 store
3 car
4 luxury
5 classy
6 boy
7 girl
8 man
9 woman
10 strong
etc ...

2.tbl_media

id int NOT NULL AI PK
name VARCHAR(50) NOT NULL

内容

id name
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine
10 ten
etc...

3. tbl_media_tag

id int NOT NULL AI PK
media_id int NOT NULL -> relationship with tbl_media
tag_id int NOT NULL -> relationship with tbl_tag

内容

id media_id tag_id
1 1 4
2 1 3
3 4 3
4 5 2
5 6 8
6 4 4
7 8 7
8 7 4
9 7 3
10 6 2
11 8 4
12 8 3
etc...

我想用 LIMIT 得到最流行的标签(tag_id)组合,例如最流行的前十个标签组合

我想得到这样的结果

4, 7, 3 (75)
4, 8 (42)
1, 7, 9, 10 (28)
7, 8, 9 (10)
7, 2 (2)

【问题讨论】:

  • 您能否将结果中的数字替换为 tbl_tag 中的适当字符串,以便更清楚地了解您期望的结果
  • 如果我们能通过这种方式解决它,那就太好了。但是如果我们不能,我可以更改我的媒体表,并添加 tags 列,我将在其中存储标签集合字符串 (汽车、生活方式、女孩、男人等...) 。然后我们可以通过这种方式解决我们的问题 - 我们将尝试找到最流行的单词组合形式媒体,在 tags 列中,我们会得到类似car, life, style (24) girl, lifestyle (12) luxury, classy, business, lifestyle (7) etc...的结果

标签: php mysql sql select join


【解决方案1】:
SELECT *
FROM 
    (SELECT tag_sum,
           COUNT(*) as tag_sum_count
    FROM 
        (SELECT GROUP_CONCAT(DISTINCT tag_id 
                             ORDER BY tag_id DESC 
                             SEPARATOR ',') as tag_sum,
              media_id
        FROM tbl_media_tag mt
        GROUP BY media_id) sub
    GROUP BY tag_sum) sub2
ORDER BY tag_sum_count DESC
LIMIT 10

【讨论】:

  • 非常感谢斯坦尼斯拉夫,兄弟!很棒的 MySQL 知识!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
相关资源
最近更新 更多