好吧,我从一个设计糟糕的数据库中得到了一个复杂的查询......在一个查询中,我需要从一个数据库获取一个计数,另一个数据库中的信息来自另一个数据库,这里有:
每个博客都有一个类型(新闻,报告等)和网站特定部分的部分ID,但它也可以链接到多个计算机游戏和部分)
类型(blog_id,标题,正文......等等)//是的我知道类型是博客的名称而不只是表格中的ID号而不是我的设计
blog_link(blog_id,blog_type,section_id,game_id)
blog_comments(blog_id,blog_type,comment等等)
所以查询有点像这样:
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:我提供了赏金,因为这个问题肯定可以解决!!来吧伙计们!
答案 0 :(得分:1)
您似乎只想获得DISTINCT计数,所以只需在计数中添加DISTINCT即可。虽然您需要为每个评论添加某种唯一标识符。理想情况下,每个评论都有一个唯一的ID(即自动增量),但如果不这样,你可以使用blog_id + author + timestamp。
SELECT bl.`blog_id`, count(DISTINCT CONCANT(bc.`blog_id`,bc.`author`,bc.`timestamp`) AS 'comment_count',...
这应该给你一个独特的评论数。
答案 1 :(得分:0)
未经测试:
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
答案 2 :(得分:0)
我认为您需要首先获取“X”类型的博客,然后对这些博客进行评论。
SELECT
EXPR1.blog_id,
count(bc.`blog_id`) AS 'comment_count'
这
(
选择
bl。blog_id
,t。added
从
blog_link bl
加入
键入t ON t。id
= bl。blog_id
WHERE
bl.`section_id` = [$section_id]
AND
bl.`blog_type` = '[$type]'
GROUP BY
bl.`blog_id`
ORDER BY
`added` DESC
LIMIT 0,20
)AS EXPR1
加入
blog_comments bc ON
(
bc。item_id
= EXPR1。blog_id
)