我有以下查询:
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/