首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql连接不同

Mysql连接不同
EN

Stack Overflow用户
提问于 2016-04-30 06:11:36
回答 1查看 37关注 0票数 0

返回所有帖子的查询,以及它被查看了多少次,以及有多少人喜欢该帖子。问题是,由于查询中的另一个联接,它返回重复项。

代码语言:javascript
复制
        SELECT count(bv.postId) as views, SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meeh, GROUP_CONCAT(taxonomy_id) as target, GROUP_CONCAT(t.name) as tname, `t`.`type` as `ttype`, `users`.`fullname`, `users`.`picture`, `users`.`role`, `users`.`picture`, `blog`.* FROM `blog` 
INNER JOIN `blog_taxonomy` `bt` ON `bt`.`blog_id` = `blog`.`id` 
INNER JOIN `users` ON `users`.`id` = `blog`.`user_id` 
INNER JOIN `taxonomy` `t` ON `t`.`id` = bt.`taxonomy_id` 
LEFT JOIN `blog_views` `bv` ON `blog`.`id` = `bv`.`postId` 
WHERE MONTH(blog.time_posted) = 4 AND `blog`.`deleted` =0 GROUP BY `blog`.`id` ORDER BY `blog`.`id` DESC

blog_views表是一个简单的表,用于跟踪谁看到了什么帖子,以及他是否喜欢它。

代码语言:javascript
复制
Table:blog_views 
postId  userId  vote[int values, 1 for like, -1 for dislike and 0 default]

问题是视图的计数总是返回blog_taxonomy表的n*计数!我用来控制帖子上的标签。

代码语言:javascript
复制
Table blog_taxonomy:
taxonomy_id post_id
 1           1
 2           1
Table Taxonomy
 id  name
  1   art
  2   music

这是一个多到多的表,用来将帖子与标签联系起来。从查询中删除它可以解决问题:(但是我需要它!)

我试着在这个组中添加bv.postId,但是它似乎没有任何效果!

在正常情况下,我可以使用

代码语言:javascript
复制
select count(bv.postId) as views, SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meet from blog_views where postId = ?{blog.id}
group by postId

我在这里错过了什么?

编辑

使用子查询解决了问题。那么,为什么下面的子查询方法有效,而连接却不起作用呢?

代码语言:javascript
复制
SELECT bv.views, bv.likes, bv.meeh, GROUP_CONCAT(taxonomy_id) as target, GROUP_CONCAT(t.name) as tname, `t`.`type` as `ttype`, `users`.`fullname`, `users`.`picture`, `users`.`role`, `users`.`picture`, `blog`.* FROM `blog` 
INNER JOIN `blog_taxonomy` `bt` ON `bt`.`blog_id` = `blog`.`id` 
INNER JOIN `users` ON `users`.`id` = `blog`.`user_id` 
INNER JOIN `taxonomy` `t` ON `t`.`id` = bt.`taxonomy_id` 
LEFT JOIN (select count(*) as views,postId,SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meeh from `blog_views` group by postId) `bv` ON `bt`.`blog_id` = `bv`.`postId` 
WHERE MONTH(blog.time_posted) = 4 AND `blog`.`deleted` =0 GROUP BY `blog`.`id` ORDER BY `blog`.`id` DESC
EN

回答 1

Stack Overflow用户

发布于 2016-04-30 06:23:46

据我所知,您在分类法表上的联接条件是不正确的,JOIN taxonomy t ON t.id = taxonomy_id

  1. 将别名添加到taxonomy_id,即bt.taxonomy_id,如果这仍然不起作用
  2. 将所有连接作为内部连接
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36951457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档