Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算Codeigniter中一行填充了多少MySQL字段_Php_Mysql_Codeigniter - Fatal编程技术网

Php 计算Codeigniter中一行填充了多少MySQL字段

Php 计算Codeigniter中一行填充了多少MySQL字段,php,mysql,codeigniter,Php,Mysql,Codeigniter,我需要编写一个方法,允许我计算一行中有多少字段是由用户填写的。 例如: User Name Age Country Gender Height 1 Mike 34 USA Male 6 2 Bill 23 CA 5 3 Jane 31 USA 在上面的示例中,我希望查询数据库并返回一个反映用户记录

我需要编写一个方法,允许我计算一行中有多少字段是由用户填写的。 例如:

 User    Name    Age    Country    Gender    Height
    1       Mike    34     USA        Male      6
    2       Bill    23     CA                   5
    3       Jane    31     USA   
在上面的示例中,我希望查询数据库并返回一个反映用户记录完成程度的值。例如:

User 1 = 100% complete
User 2 = 80% complete
User 3 = 60% complete

我正在使用CodeIgniter3。你们能帮帮我吗

使方法在方法中传递参数

  function profileCompleted($user){
         $percentage = 0;
         $sql ="SELECT * FROM user  WHERE user=$user"
       $query = $this->db->query($sql);

      if ($query->num_rows() > 0)
          { 
            $notEmpty =   0;
            $totalField =5;
            foreach ($query->result() as $row)
              {
               $notEmpty +=  ($row->Name != '') ? 1 : 0;
                //do with all field
              }
          $percentage = $notEmpty/$totalField *100;
          }
        return $percentage.'%';
    }

你可以这样试试::

$result = mysql_query('SELECT * FROM `MyTable`');
while($row = mysql_fetch_row($result)){
$empty_count = 0;
$count = count($row);
for($i = 0; $i < $count; $i++)
    if($row[$i] === '' || $row[$i] === 'NULL')
        $empty_count++;
echo 'User '.$row[0].' = '.((int)(100*(1-$empty_count/($count-1)))).'% complete';
}
$result=mysql\u查询('SELECT*FROM'MyTable`);
while($row=mysql\u fetch\u row($result)){
$empty_count=0;
$count=计数($row);
对于($i=0;$i<$count;$i++)
如果($row[$i]==''| |$row[$i]==='NULL')
$empty_count++;
回显“用户”。$row[0]。='((int)(100*(1-$empty_count/($count-1)))。%complete';
}

希望它能起作用。

我认为也可以通过SQL查询完成:

SELECT id,
(
    CASE name WHEN NULL THEN 0 ELSE 1 END
    +
    CASE WHEN age IS NULL THEN 0 ELSE 1 END
    +
    CASE country WHEN '' THEN 0 ELSE 1 END
    +
    CASE gender WHEN '' THEN 0 ELSE 1 END
    +
    CASE WHEN height IS NULL THEN 0 ELSE 1 END
) * 100 / number_of_fields AS complete
from your_table;

如何在视图中显示该值。通过在load function中传递参数,在controller中调用此方法,它返回结果,并只在视图中传递,与您传递的其他数据相同。此方法仅返回百分比如果您想返回更多数据,则在foreach中添加变量,如果存在where条件,则仅显示单个用户i我想我把你弄糊涂了,无论如何谢谢你的帮助。