码迷,mamicode.com
首页 > 数据库 > 详细

MySQL多表查询数据出现串行

时间:2018-08-22 11:04:13      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:怎么   user   jpg   span   ima   显示   desc   use   联表查询   

技术分享图片

 

如上图所示,要查询一个用户(从注册开始) 7天, 15天, 30天的发帖数量, 查询出来的数据结果串行了。因为,有注册的用户,他前7天没有发帖,即发帖数为0,在数据表中应该显示为NULL的,所以数据表中15天多出来的数据,是用户7天发帖数为0的。   30天的也同样道理。

怎么解决呢? 首先以 最大限期时30天的为主参照表, 30天包含15天,7天,如果以他为参考主表,筛选出来的用户ID肯定会也有15天,7天的,如果没发帖的话,查询显示就是NULL。

语句这样写, .

 

select * from (连表查询产生的虚拟表30天的) left join (联表查询产生的虚拟表7天的) on 这两张虚拟表的连接条件

select * from (连表查询产生的虚拟表30天的) left join (联表查询产生的虚拟表15天的) on 这两张虚拟表连接条件

SELECT
A.id, A.user_id, A.`注册时间`, A.`发帖数量`, B.`发帖数量`
FROM
(
SELECT
qp.id,
qp.user_id,
qs.wechat,
from_unixtime(qp.create_at, ‘%Y-%m-%d‘) 注册时间,
COUNT(qp.user_id) 发帖数量,
count(qs.id) 二手数量,
qs.create_at ,
uw.create_at AS uwcreate
FROM
welife_quan.quan_post AS qp
LEFT JOIN quan_post_second AS qs ON qs.pid = qp.id
LEFT JOIN welife_system.user_wechat AS uw ON uw.unionid = qp.user_id
GROUP BY
qp.user_id
HAVING
qs.wechat != ‘‘
AND qs.create_at <= uwcreate + 60 * 60 * 24 * 30
ORDER BY
qp.id DESC
) AS A
LEFT JOIN(
SELECT
qp.id,
qp.user_id,
qs.wechat,
from_unixtime(qp.create_at,‘%Y-%m-%d‘) 注册时间,
COUNT(qp.user_id) 发帖数量,
count(qs.id) 二手数量,
qs.create_at,
uw.create_at AS uwcreate
FROM
welife_quan.quan_post AS qp
LEFT JOIN quan_post_second AS qs ON qs.pid = qp.id
LEFT JOIN welife_system.user_wechat AS uw ON uw.unionid = qp.user_id
GROUP BY
qp.user_id
HAVING
qs.wechat != ‘‘
AND qs.create_at <= uwcreate + 60 * 60 * 24 * 7
ORDER BY
qp.id DESC
) AS B ON A.user_id = B.user_id;

MySQL多表查询数据出现串行

标签:怎么   user   jpg   span   ima   显示   desc   use   联表查询   

原文地址:https://www.cnblogs.com/wangshuazi/p/9516144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!