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

PHP如何统计MySQL列NULL值数量 实现未读消息badge角标通知

未读消息角标功能实现方案

原有代码问题

原有代码无法正确统计未读数,核心问题有3个:

  1. 查询NULL值语法错误:MySQL中查询字段为NULL必须使用IS NULL专用语法,直接把PHP函数is_null()写入查询条件、用等值判断都无法匹配NULL值记录
  2. 查询结果取值错误:get_where()方法返回的是数据库结果对象,不是统计后的数字,需要调用行数统计方法才能拿到总条数
  3. 模板语法错误:角标输出位置的PHP代码断裂,三元运算符书写不完整,会直接触发语法解析错误

修正后可运行代码

<?php if (has_permission('messaging')) : ?>
    <li class="side-nav-item">
        <a href="<?php echo site_url('admin/message'); ?>" class="side-nav-link <?php if ($page_name == 'message' || $page_name == 'message_new' || $page_name == 'message_read') echo 'active'; ?>">
            <i class="dripicons-message"></i>
            <span><?php echo get_phrase('message'); ?></span>
            <?php
            // 统计read_status为NULL的未读消息总数
            $this->db->where('read_status IS NULL', null, false);
            $unread_message_count = $this->db->count_all_results('message');
            // 仅当存在未读消息时显示角标
            if ($unread_message_count > 0):
            ?>
            <span class="badge badge-danger-lighten badge-pill float-right"><?php echo $unread_message_count; ?></span>
            <?php endif; ?>
        </a>
    </li>
<?php endif; ?>

补充说明

  • 上述写法兼容CodeIgniter 3框架的数据库查询语法,count_all_results()会直接返回符合条件的记录总条数,性能优于先查全量数据再统计行数
  • 如果后续业务调整未读状态标识(例如用0代表未读、1代表已读),只需要把查询条件替换为$this->db->where('read_status', 0);即可
  • 未读数为0时默认隐藏角标,避免侧边栏出现无意义的0值标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:06:25