PHP如何统计MySQL列NULL值数量 实现未读消息badge角标通知
未读消息角标功能实现方案
原有代码问题
原有代码无法正确统计未读数,核心问题有3个:
- 查询NULL值语法错误:MySQL中查询字段为NULL必须使用
IS NULL专用语法,直接把PHP函数is_null()写入查询条件、用等值判断都无法匹配NULL值记录 - 查询结果取值错误:
get_where()方法返回的是数据库结果对象,不是统计后的数字,需要调用行数统计方法才能拿到总条数 - 模板语法错误:角标输出位置的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
相关产品推荐
相关产品推荐

