zoukankan      html  css  js  c++  java
  • MySQL多表查询数据出现串行

    如上图所示,要查询一个用户(从注册开始) 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;

  • 相关阅读:
    access导入报错 请求筛选模块被配置为拒绝超过请求内容长度的请求
    win10装回win7。PE下把原来的系统盘格掉,再安装hdd,重启就好了
    sql语句Order by 报错列名不明确
    C#字符串长度判断
    Struts2中数据封装机制
    Struts2中的页面跳转
    Struts2访问Servlet API的三种方式
    Struts2的动态Action实现
    Struts2基本概念
    javaweb开发之EL表达式
  • 原文地址:https://www.cnblogs.com/wangshuazi/p/9516144.html
Copyright © 2011-2022 走看看