财务报表:序号    用户名   姓名    续费(元)  赠送(元)   保证金(元)   注册费(元)   IP地址费(元)    使用费(元)0       wsz     xiaobai   60            10        0               0            50                201       bbb     zhangs    50            0         0               0             30               100
表A以下字段:user(登录名) 
name(姓名)-----------------------------表B有以下3个字段:type:(分5个类型:续费、赠送、保证金、注册费、IP地址费 ,根据不同的情况type的值就不同)savingnum(续费)user(登录名)time----------------------------
表C有以下字段:
user(登录名)charge1(使用费)time----------------------------表D有以下字段:
user(登录名)charge2(使用费)
time关联:这四个表的user是相等的,而且在各表中是唯一存在的。
注意:是报表,查出的值,都是某范围内的某字段的‘和’
每条记录中的使用费,如果在D表中值非空,那么就在C表中为0;如果在C表中值非0,那就不存在D表中。问题:1  查询:在某条件时间($star_time<=time<=$end_time)内,找出某一范围的续费($star_savingnum<=savingnum<=$end_savingnum)2  查询:在某条件时间($star_time<=time<=$end_time)内,找出某一范围的使用费($star_savingnum<=savingnum<=$end_savingnum)

解决方案 »

  1.   

    太多的业务逻辑, 
    不适合用sql语句来实现了.
      

  2.   

    wuszh1688 你可以考虑下哈希 推荐(如果业务逻辑复杂的话) 
      

  3.   

    哪要看你的需求如何?
    1 表B type:(分5个类型:续费、赠送、保证金、注册费、IP地址费),类型的结构设置,对统计本身就有影响.要么取所有用户的某种续费类型做统计,要么取单个用户的所有类型做统计,这个可以通过group by 来实现.2 C和D表结构基本上是相同的,不知道你所谓的(如果在D表中值非空,那么就在C表中为0;如果在C表中值非0,那就不存在D表中)是何解.
      如果某个用户在C表中有值又在D表中有值,哪就人为增加了难度.
      

  4.   

    建议自己准备建表语句,准备点数据,把sql发出来,这样方便本地测试,要不又要来回解释半天.
      

  5.   

    某条记录的charge值,在C表中存在(并非0), 就会在D表中不存在。只要在D表中存在,就不会在C表中存在,(0都没有)
      

  6.   

    SELECT B.user as user,
    SUM(B.savingnum) as saving_num, 
    A.user as username,
    SUM(C.charge1) as charge1,
    SUM(D.charge2) as charge2 
    FROM  B LEFT JOIN A ON B.user=A.username 
    LEFT JOIN  C ON C.user=A.username 
    LEFT JOIN  D ON D.user=A.username
    WHERE ".$where." GROUP BY user_saving.user_login_name ".$where9."$where='时间条件......'   $where9=($charge_start != 0) ? " HAVING charge1 >= ".$charge_start:"";
    $where9.=($charge_end != 0) ? " AND charge1 <= ".$charge_end:"";
    $where9=($charge_start != 0) ? " HAVING charge2 >= ".$charge_start:"";
    $where9.=($charge_end != 0) ? " AND charge2 <= ".$charge_end:"";
    这是在某时间内,使用费用的查询。我这语句是错误的,只提供大家看。然后改
      

  7.   

    sql是实现关系查询的,不是进行逻辑计算的