2016-04-17 32 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; 
相關問題