gpt4 book ai didi

mysql - 如何使用中间表选择相似的项目?

转载 作者:行者123 更新时间:2023-11-29 07:30:47 25 4
gpt4 key购买 nike

根据一些建议,我将一个表分成 3 个部分,以使用多对多查询,所以现在我有:

table 上动漫:

+----------------+-------------+
| id | title |
+----------------+-------------+
| 1 | Anime A |
| 2 | Anime B |
| 3 | Anime C |
+----------------+-------------+

Tabela de genres:

+----------------+-------------+
| id | genre |
+----------------+-------------+
| 1 | Action |
| 2 | Romance |
| 3 | Ninja |
+----------------+-------------+

然后是中间动画和流派的第三个表:

+----------------+-------------+
| anime_id | genre_id |
+----------------+-------------+
| 1 | 1 |
| 1 | 3 |
| 2 | 2 |
| 2 | 3 |
| 3 | 2 |
+----------------+-------------+

给定一个动漫 ID,可以得到这样的流派:

SELECT an.id, an.title, GROUP_CONCAT(g.genre) AS genres
FROM animes an

INNER JOIN intermediate_table ti ON ti.anime_id = an.id

INNER JOIN genres g ON g.id = ti.genre_id

WHERE an.id = 1

好吧,如果我想根据常见类型的数量获取相似动漫的列表,我应该做什么查询呢?就像我想知道所有与动漫 1 相似的动漫,并按常见类型的数量对它们进行排序。

Fidddle example

最佳答案

  1. 查找您想找到相似之处的动漫的 genre_id。
  2. 检查哪些动漫与那些 genre_id 匹配
  3. 数数并排序

SQL DEMO

SELECT anime_id , COUNT(F.genre_id)
FROM anime_genre A
LEFT JOIN ( SELECT `genre_id`
FROM `anime_genre`
WHERE `anime_id` = 1 ) F
ON A.`genre_id` = F.`genre_id`
WHERE `anime_id` <> 1
GROUP BY anime_id
HAVING COUNT(F.genre_id) > 0
ORDER BY COUNT(F.genre_id) DESC

输出

我添加了一个额外的动漫来显示它们有多相似的顺序

| anime_id | COUNT(F.genre_id) |
|----------|-------------------|
| 4 | 2 |
| 2 | 1 |

关于mysql - 如何使用中间表选择相似的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51382793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com