sql - 加入;请只记录一张!

标签 sql mysql join

好吧,我有一个来自设计不良的数据库的复杂查询...在一个查询中,我需要从一个数据库获取计数,从另一个数据库获取信息以及另一个数据库的链接,如下所示:

每个博客都有一个类型(新闻、报告等)和网站特定部分的版 block ID,但它也可以链接到多个电脑游戏和版 block )

type (blog_id, title, body, etc...)//是的,我知道 type 是博客的名称,而不仅仅是表中的 ID 号,不是我的设计

博客_链接(博客_id、博客_类型、部分_id、游戏_id)

博客评论(博客 ID、博客类型、评论等...)

所以查询有点像这样:

SELECT bl.`blog_id`, count(bc.`blog_id`) AS 'comment_count', t.`added`
FROM blog_link bl
JOIN type t ON t.`id` = bl.`blog_id`
JOIN blog_comments bc ON (`item_id` = bl.`blog_id` AND `blog_type` = '[$type]')
WHERE bl.`section_id` = [$section_id] AND bl.`blog_type` = '[$type]'
GROUP BY bl.`blog_id`
ORDER BY `added` DESC
LIMIT 0,20

现在只要我没有与一个博客关联多个游戏就可以了。

编辑:因此,目前如果关联了多个游戏,则 comment_count 会乘以关联游戏的数量......不好。

我不知道我该如何做到这一点......它只是不起作用!如果我能在加入之前按 blog_id 进行分组,那就太棒了...有人有想法吗?

提前非常感谢

  • 多尔詹

edit2:我已经提供了赏金,因为这个问题肯定可以解决!加油吧伙计们!

最佳答案

看起来您只想获得 DISTINCT 计数,因此只需在计数中添加 DISTINCT 即可。尽管您需要为每个评论添加某种唯一标识符。理想情况下,每个评论都有一个唯一的 ID(即自动递增),但如果没有,您可能可以使用 blog_id+author+timestamp。

SELECT bl.`blog_id`, count(DISTINCT CONCANT(bc.`blog_id`,bc.`author`,bc.`timestamp`) AS 'comment_count',...

这应该会给你一个独特的评论计数。

关于sql - 加入;请只记录一张!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2272086/

相关文章:

mysql - 如何获取每个员工最多两条记录

php - 将 php 代码实现为 html 或仅使用 php 会更快吗?查看更多详情

join - KDB 反向 asof join (aj) 即在下一个引用而不是上一个引用

mysql - 根据表优先级获取mysql结果

mysql - SQL 查询 - 大量连接 -

mysql - 计算MySQL坐标并更新行

sql - PostgreSQL 中的递归 CTE 问题

sql - 如果不存在则创建 PostgreSQL ROLE (user)

Php Query In循环不更新数据库

python - python 查找具有相似列的两个表之间缺失的数据