php - MySQL 获取最受欢迎的标签 ID 组合及其计数

标签 php mysql sql select join

我有三个表

1.tbl_tag

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

content

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

content

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

content

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)

最佳答案

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

关于php - MySQL 获取最受欢迎的标签 ID 组合及其计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688782/

相关文章:

javascript - 我怎样才能取消确认 sweetalert

PHP/MySQL 限制字段输出的字符

java - 如何使用 Windows 应用程序从网络服务器访问数据

sql - MySQL InnoDB 只锁定受影响的行?

SQL Server : Does 'DROP TABLE' inside transaction causes an implicit commit?

javascript - 找出 JS 和 PHP 中时间戳的差异

mysql - 在单独的表中选择 id 未链接到用户的行

MySQL 索引不用于简单的选择查询

mysql - 如何确定 SQL 查询是否是原子的

sql - 如何表示(可选)一对(可选)关系