You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询无数据时需返回0行而非1行的问题求助

解决MySQL聚合查询无数据时返回空行的问题

这个问题我之前也碰到过,原因其实是你用了SUM这类聚合函数——哪怕没有匹配的行,MySQL还是会返回一行包含NULL值的结果,而不是空结果集。要让mysql_num_rows()返回0而非1,你可以试试下面两种方法:

方法一:用HAVING子句过滤空聚合结果

在查询末尾添加HAVING子句,通过统计关联表的匹配行数来判断是否有有效数据:

SELECT 
    t.idtest, 
    t.testkhusus, 
    t.biayakhusus, 
    t.uangmuka, 
    t.total, 
    t.tanggallunas, 
    t.biayatambahan, 
    p.namaperusahaan, 
    (SUM(jth.tarifpsikolog) + SUM(jth.tarifadministrasi) + SUM(jth.tariftester)) AS biayadll 
FROM test t 
INNER JOIN perusahaan p ON t.perusahaan_idperusahaan = p.idperusahaan 
INNER JOIN (jadwaltest jt INNER JOIN jadwaltest_has_biayatimelostcost jth ON jt.idjadwaltest = jth.idjadwaltest) ON t.idtest = jt.test_idtest 
WHERE t.tanggallunas BETWEEN '2018-05-22' AND '2018-05-23'
HAVING COUNT(jth.idjadwaltest) > 0;

原理说明:

  • COUNT(jth.idjadwaltest)会统计关联表jadwaltest_has_biayatimelostcost的匹配行数,无有效数据时这个值为0
  • HAVING子句在聚合计算完成后过滤结果,不满足条件的行(无数据情况)会被剔除,最终返回空结果集

方法二:将原查询作为子查询,外层过滤空值

如果更倾向于直观过滤聚合后的结果,可以把原查询嵌套成子查询,在外层筛选biayadll不为NULL的行:

SELECT * FROM (
    SELECT 
        t.idtest, 
        t.testkhusus, 
        t.biayakhusus, 
        t.uangmuka, 
        t.total, 
        t.tanggallunas, 
        t.biayatambahan, 
        p.namaperusahaan, 
        (SUM(jth.tarifpsikolog) + SUM(jth.tarifadministrasi) + SUM(jth.tariftester)) AS biayadll 
    FROM test t 
    INNER JOIN perusahaan p ON t.perusahaan_idperusahaan = p.idperusahaan 
    INNER JOIN (jadwaltest jt INNER JOIN jadwaltest_has_biayatimelostcost jth ON jt.idjadwaltest = jth.idjadwaltest) ON t.idtest = jt.test_idtest 
    WHERE t.tanggallunas BETWEEN '2018-05-22' AND '2018-05-23'
) AS temp_result
WHERE temp_result.biayadll IS NOT NULL;

原理说明:

  • 子查询在无数据时会返回一行biayadll为NULL的结果
  • 外层查询通过WHERE temp_result.biayadll IS NOT NULL过滤掉这行空数据,最终返回空结果集

这两种方法都能让mysql_num_rows()在无有效数据时返回0,你可以根据自己的习惯选择其中一种。

内容的提问来源于stack exchange,提问作者Aditya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:20:51