2016-04-17 27 views
3

我需要编写一个方法,该方法可以计算用户填充行中有多少个字段。 例如:计算一行中填充了多少个MySQL字段Codeigniter

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 

我正在使用Codeigniter 3.你们可以帮我吗。

回答

2

制作方法传递参数的方法

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.'%'; 
    } 
+0

感谢它的工作。 –

+0

@SandeepPariyar :)接受此答案并看看http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

我如何在我的视图中显示该值。 –

3

您可以尝试像这样::

$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'; 
} 

希望它会工作。

2

我认为它可以通过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; 
相关问题