使用PHP计算非空列

Ami*_*egi 0 php mysql mysqli

我有一张桌子"tbl_userpersonal",

我想要实现的是检查哪些列已填充,哪些不是,我可以计算或显示配置文件完成百分比.\

到目前为止,我已经尝试了很多不同的技术和代码,我的代码计算所有列,但我希望它将空值列计为0.请帮助我解决方案.

到目前为止,如果任何一列中的用户甚至只有一个条目,它给我100%,否则0%没有inbetween

目前,如果user_authtoken ="app_7837hfjd57hdj"用户的"father_name"和"mother_name"和"DOB"列中有值,则预期输出应为3 50%,即(3/6)*100

现在发生的事情是

如果对于具有user_authtoken ="app_7837hfjd57hdj"的用户,这些列中的任何一个内部都有值,则输出显示为

6 100%即(6/6)*100

或者如果user_authtoken ="app_7837hfjd57hdj"的用户没有条目,则输出为0 0%

在此输入图像描述

这是PHP代码

    $personal = mysqli_query($con,"

     SELECT   father_name,
     mother_name,
     DOB,
     adhar_no,
     address,
     religion,
     CASE WHEN father_name IS NOT NULL THEN 1 ELSE 0 END + 
     CASE WHEN mother_name IS NOT NULL THEN 1 ELSE 0 END + 
     CASE WHEN DOB IS NOT NULL THEN 1 ELSE 0 END + 
     CASE WHEN adhar_no IS NOT NULL THEN 1 ELSE 0 END +
     CASE WHEN address IS NOT NULL THEN 1 ELSE 0 END +
     CASE WHEN religion IS NOT NULL THEN 1 ELSE 0 END AS personal
     FROM  user WHERE `user_authtoken` = '$user_ath'

     ") or die(mysqli_error($con));

      $data=mysqli_fetch_assoc($personal);
      $pro_count =  $data['personal'];
      echo $pro_count ; 
      echo '<br>';
      $percentage = ($pro_count /6)*100;
      echo $percentage;
Run Code Online (Sandbox Code Playgroud)

小智 5

我认为你在表中有空值而不是空尝试这个

这将检查null和空

$personal = mysqli_query($con,"

     SELECT   father_name,
     mother_name,
     DOB,
     adhar_no,
     address,
     religion,
     CASE WHEN father_name IS NOT NULL AND father_name<>'' THEN 1 ELSE 0 END + 
     CASE WHEN mother_name IS NOT NULL AND mother_name<>'' THEN 1 ELSE 0 END + 
     CASE WHEN DOB IS NOT NULL AND DOB<>'' THEN 1 ELSE 0 END + 
     CASE WHEN adhar_no IS NOT NULL AND adhar_no<>'' THEN 1 ELSE 0 END +
     CASE WHEN address IS NOT NULL AND address<>'' THEN 1 ELSE 0 END +
     CASE WHEN religion IS NOT NULL AND religion<>'' THEN 1 ELSE 0 END AS personal
     FROM  user WHERE `user_authtoken` = '$user_ath'

     ") or die(mysqli_error($con));
Run Code Online (Sandbox Code Playgroud)