Sql 参加请给我一张唱片!

Sql 参加请给我一张唱片!,sql,mysql,join,Sql,Mysql,Join,好的,我有一个设计糟糕的数据库的复杂查询。。。在一个查询中,我需要从一个数据库获取计数,从另一个数据库获取信息,并从另一个数据库获取链接,如下所示: 每个博客都有一个新闻、报告等类型和站点某一部分的节Id,但也可以链接到多个电脑游戏和节 键入博客id、标题、正文等..//是的,我知道类型是博客的名称,而不仅仅是表中的id号,不是我的设计 博客链接博客id、博客类型、节id、游戏id 博客评论博客id、博客类型、评论等 所以查询有点像这样: SELECT bl.`blog_id`, count(b

好的,我有一个设计糟糕的数据库的复杂查询。。。在一个查询中,我需要从一个数据库获取计数,从另一个数据库获取信息,并从另一个数据库获取链接,如下所示:

每个博客都有一个新闻、报告等类型和站点某一部分的节Id,但也可以链接到多个电脑游戏和节

键入博客id、标题、正文等..//是的,我知道类型是博客的名称,而不仅仅是表中的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

现在这是好的,只要我没有多个游戏与一个博客

编辑:因此,如果当前有多个游戏关联,则注释计数将乘以关联的游戏数量。。。不太好

我不知道我该怎么做。。。它就是不起作用!如果我能在加入之前通过blog_id进行分组,那将是一个黄金组合。。。有人有主意吗

非常感谢

多尔扬 edit2:我已经悬赏了,因为这个问题肯定能解决!!来吧,伙计们

未测试:

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

我认为您需要先获取X类型的博客,然后对这些博客进行评论计数

SELECT 
EXPR1.blog_id, 
count(bc.`blog_id`) AS 'comment_count'
从 选择 bl.blog_id,t.added 从…起 博客链接 参加 在t.id=bl.blog\u id上键入t

AS EXPR1 参加 英国广播公司博客评论 bc.item_id=EXPR1.blog_id

似乎您只想获得一个不同的计数,所以只需在计数中添加不同的计数即可。尽管您需要为每个注释添加某种唯一标识符。理想情况下,你会有一个唯一的id,即每个评论的自动递增,但如果你没有,你可能会使用blog_id+author+timestamp

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

这将为您提供唯一的评论计数。

您使用的是什么数据库?它支持子查询吗?@extraneon:标题是我添加的“MySQL”标记。你的查询现在返回什么,你希望它返回什么?现在这很好,只要我没有多个游戏与一个博客关联。我已经编辑了主要文章。我认为你的例子不完整。您在其中写入ia.section\u id,但未定义ia。。。
SELECT bl.`blog_id`, count(DISTINCT CONCANT(bc.`blog_id`,bc.`author`,bc.`timestamp`) AS 'comment_count',...