m0_69693998 2024-07-26 16:26 采纳率: 38%
浏览 1

php查询mysql使用countif方法

php查询mysql使用countif方法,结果报错了,这是为什么,需要在哪里进行修改呢


$lsit=MoneyLog::where('business_id',$businessId)
            ->field("sum(IF(type=5,money,0)) as rechagemoeny, abs(sum(IF(type=13,money,0))) as outmoney,COUNTIF(type=5) as rechagenum,COUNTIF(type=13) as outnum,left(FROM_UNIXTIME(createtime),10)")
            ->order("createtime", 'desc')
            ->group("left(FROM_UNIXTIME(createtime),10)")
            ->select();

img

  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-07-26 16:27
    关注

    引自免费微信小程序:皆我百晓生

    从你的问题来看,你在使用PHP查询MySQL数据库时遇到了一个错误,错误提示是 FUNCTION apitigepg_com.COUNTIF does not exist。这个问题的原因在于你尝试使用了 COUNTIF 函数,但实际上在MySQL中并不存在这个函数。在MySQL中,你需要使用 COUNT 函数来计数特定条件下的行数。你的代码应该修改为如下形式:

    $lsit = MoneyLog::where('business_id', $businessId)
                ->field("sum(IF(type=5,money,0)) as rechagemoeny, abs(sum(IF(type=13,money,0))) as outmoney, COUNT(CASE WHEN type=5 THEN 1 END) as rechagenum, COUNT(CASE WHEN type=13 THEN 1 END) as outnum, left(FROM_UNIXTIME(createtime),10)")
                ->order("createtime", 'desc')
                ->group("left(FROM_UNIXTIME(createtime),10)")
                ->select();
    

    这里,我使用了 COUNT(CASE WHEN ... THEN ... END) 结构来替代 COUNTIF,这是一种在MySQL中实现条件计数的常用方法。注意这里CASE语句的语法,WHEN后面是你的条件,THEN后面是满足条件时的返回值。在COUNT函数中,我们只需要返回任意值(这里是1),因为COUNT函数会计算非NULL值的数量。这样你就可以按照type的不同值来分别计数了。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月26日