mysql - 如何为以下内容创建 mysql 查询?

标签 mysql join

我有以下查询:

SELECT m.*, COUNT(c.chapter_nr) as chapters, MAX(c.chapter_nr) as latest_chapter
FROM comic_series AS m
JOIN chapters as c on c.comic_id = m.id
WHERE m.title_en = 'test'

这让我可以通过给出漫画的名称来找到漫画书中的章节。该查询从 comic_series 表中选择所有列并添加 chapters(该漫画的章节数)和 latest_chapter(最新章节)列.

现在,困扰我一段时间的问题是:

我有第三列,其中包含链接到类别 ID 的漫画 ID(类别详细信息在第四个表中,但这与此处无关),我想通过搜索来选择漫画书及其章节类别 ID。

这是我到目前为止想出的:

SELECT `m`.*, COUNT(c.chapter_nr) as chapters, MAX(c.chapter_nr) as latest_chapter
FROM `comic_series` AS `m`
JOIN `comic_categories` AS `mc` ON mc.comic_id = m.id 
JOIN chapters as c on c.comic_id = m.id
where mc.category_id = 5
GROUP BY `m`.`id`

这会返回正确的 COUNT(c.chapter_nr) 但是当我添加更多类别 ID 时它会返回错误的数量:

SELECT `m`.*, COUNT(c.chapter_nr) as chapters, MAX(c.chapter_nr) as latest_chapter
FROM `comic_series` AS `m`
JOIN `comic_categories` AS `mc` ON mc.comic_id = m.id 
JOIN `chapters` as c on c.comic_id = m.id
where mc.category_id = 5 OR mc.category_id = 1
GROUP BY `m`.`id`

上面的查询应该为 COUNT(c.chapter_nr) 返回 1,但它返回 2。这可能是因为 comic_categories 表中有 2 条记录comic,chapters 表中只有 1 条记录。

最佳答案

当您连接到类别表时,您会为每个匹配类别获得一行。如果漫画分为两个类别,您将获得重复的行数。

尝试使用 COUNT(DISTINCT c.chapter_nr) 代替:

SELECT `m`.*, COUNT(DISTINCT c.chapter_nr) as chapters, MAX(c.chapter_nr) as latest_chapter
FROM `comic_series` AS `m`
JOIN `comic_categories` AS `mc` ON mc.comic_id = m.id 
JOIN `chapters` as c on c.comic_id = m.id
where mc.category_id = 5 OR mc.category_id = 1
GROUP BY `m`.`id`

关于mysql - 如何为以下内容创建 mysql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884788/

相关文章:

php - 插入后无法获取行值

mysql - SQL MYSQL 选择记录排除存在任何重复的行

php - JOIN 2 具有不同列的表

sql - 在 SQL Server 2008 中连接 3 个表

mysql - sql查询错误1060重复列错误 'nome'

mysql - 在 INSERT 上搜索和更新

mysql - 单个查询以获取消息并计算他们的答案

php - 让函数在 php 刷新时执行 (PHP)

SQL 多次检查相似项

Mysql 多重与内连接