如何在MySQL中统计指定ID行内非空、非NULL填充列的数量,适配WordPress场景
MySQL 统计指定行已填充列数量的实现方法
原生 SQL 写法
核心逻辑是对每列做非空且非空字符串判断,符合条件计数1,求和后就是已填充的列总数:
SELECT (CASE WHEN ID IS NOT NULL AND ID != '' THEN 1 ELSE 0 END) + (CASE WHEN FName IS NOT NULL AND FName != '' THEN 1 ELSE 0 END) + (CASE WHEN LName IS NOT NULL AND LName != '' THEN 1 ELSE 0 END) AS filled_column_count FROM 你的表名 WHERE ID = 1;
按你给出的示例表测试:
- WHERE ID = 1时返回结果为2,对应符合要求的列ID、FName
- WHERE ID = 2时返回结果为2,对应符合要求的列ID、LName
完全符合你的预期输出。
如果需要同时获取已填充的列名,可以调整查询逻辑:
SELECT (CASE WHEN ID IS NOT NULL AND ID != '' THEN 1 ELSE 0 END) + (CASE WHEN FName IS NOT NULL AND FName != '' THEN 1 ELSE 0 END) + (CASE WHEN LName IS NOT NULL AND LName != '' THEN 1 ELSE 0 END) AS filled_column_count, CONCAT( CASE WHEN ID IS NOT NULL AND ID != '' THEN 'ID,' ELSE '' END, CASE WHEN FName IS NOT NULL AND FName != '' THEN 'FName,' ELSE '' END, CASE WHEN LName IS NOT NULL AND LName != '' THEN 'LName,' ELSE '' END ) AS filled_column_names FROM 你的表名 WHERE ID = 1;
获取到的列名字符串末尾多余的逗号可以在业务逻辑里直接截取处理。
WordPress 环境适配写法
WordPress 中使用官方提供的 $wpdb 类操作数据库即可,示例代码如下:
// 定义要查询的目标ID $target_id = 1; // 引入WordPress全局数据库操作实例 global $wpdb; // 替换为你实际的表名,自定义表建议自带WP表前缀 $table_name = $wpdb->prefix . '自定义表后缀'; // 预编译SQL语句防注入 $sql = $wpdb->prepare( "SELECT (CASE WHEN ID IS NOT NULL AND ID != '' THEN 1 ELSE 0 END) + (CASE WHEN FName IS NOT NULL AND FName != '' THEN 1 ELSE 0 END) + (CASE WHEN LName IS NOT NULL AND LName != '' THEN 1 ELSE 0 END) AS filled_column_count FROM %i WHERE ID = %d", $table_name, $target_id ); // 执行查询获取计数结果 $filled_count = $wpdb->get_var($sql);
后续直接使用$filled_count变量就能拿到对应统计值。
内容的提问来源于stack exchange,提问作者Abhishek Sharma
相关产品推荐
相关产品推荐

