sql语句:SELECT IFNULL(SUM(fund_money), 0) as nday,0 as yday
FROM `funds_log`
WHERE `user_id` = '100000'
AND `fund_type` = 0
AND TO_DAYS(fund_time) =  TO_DAYS(NOW())-1
union
SELECT 0 as nday,IFNULL(SUM(fund_money), 0) as yday
FROM `funds_log`
WHERE `user_id` = '100000'
AND `fund_type` = 0
AND TO_DAYS(fund_time) =  TO_DAYS(NOW())
目的就是想得到  用户100000 当前的交易金额 和 昨天的交易金额 
请教一下怎么能让他执行后效果为
最开始的代码就行-- 查询当天的
SELECT IFNULL(SUM(fund_money), 0) as nday
FROM `funds_log`
WHERE `user_id` = '100000'
AND `fund_type` = 0
AND TO_DAYS(fund_time) =  TO_DAYS(NOW())
-- 查询昨天的
SELECT IFNULL(SUM(fund_money), 0) as yday
FROM `funds_log`
WHERE `user_id` = '100000'
AND `fund_type` = 0
AND TO_DAYS(fund_time) =  TO_DAYS(NOW())-1这样的弊端就是 会对表查询两次 感觉数据多了会卡顿 所以求教一下 该如何优化,谢谢了

解决方案 »

  1.   


    SELECT IFNULL(SUM(fund_money), 0) as nday, (SELECT IFNULL(SUM(fund_money), 0) FROM `funds_log` WHERE `user_id` = '100000' AND `fund_type` = 0 AND TO_DAYS(fund_time) =  TO_DAYS(NOW())) as yday
    FROM `funds_log`
    WHERE `user_id` = '100000' AND `fund_type` = 0 AND TO_DAYS(fund_time) =  TO_DAYS(NOW())-1
    这个是最新的方法,可以达到我之前说的效果,就是感觉代码有点重复,求教一下如何优化这段sql语句,谢谢了!
      

  2.   

    select date_format(fund_time,"%Y-%m-%d") as day,
    sun(fund_money) as sumMoney
    from funds_log
    where user_id=100000 and fund_type=0
    group by date_format(fund_time,"%Y-%m-%d")跟你要求的结果不是很一样,但你看能不能解决你的问题
      

  3.   

    手打不易,你凑活着看
    纠正一下是sum不是sun你这个解决了我另外一个问题,但是没有解决当前问题,我想要的是哪种 只要两列 一列是今天的交易金额 一列是昨天的交易金额,只显示交易金额,不显示时间
    就是这个效果代码在上面,您看看能不能帮我简化一下
      

  4.   

    SELECT 
    sum(ISNULL(case when  TO_DAYS(fund_time) =TO_DAYS(NOW())-1 then fund_money else 0 end),0) yday,
    sum(ISNULL(case when  TO_DAYS(fund_time) =TO_DAYS(NOW()) then fund_money else 0 end),0) nday,
    FROM `funds_log`
    WHERE `user_id` = '100000'
    AND `fund_type` = 0
    where TO_DAYS(fund_time) = TO_DAYS(NOW()) or TO_DAYS(fund_time) = TO_DAYS(NOW())-1
    group by  TO_DAYS(fund_time)
    试下这个?