计算连续多少个MySQL字段被填充(或为空)

时间:2011-07-16 22:42:00

标签: php mysql sql 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

我想知道是否需要通过SQL子句来完成,或者如果通过PHP SQL函数可以查询数据库并计算完成程度。

有任何建议如何做到这一点?我使用的是PHP 5(codeigniter)和SQL 5.0.77,但任何路线图都会非常感激。

3 个答案:

答案 0 :(得分:9)

select 
    User,
    (
        case Name when '' 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 / 5 as complete

根据没有信息的含义使用案例:空或空。

答案 1 :(得分:8)

$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 :(得分:0)

我认为在php中你可以更好地解决这个问题,你可以创建一个函数来定义列名并为每个列赋值,然后根据从db中检索到的数据计算完成百分比 为什么一个名字可以计算20%,一个年龄可以计入5%等等,列和权重定义甚至可以存储在外部,例如xml文件,这样其他人可以玩百分比而不需要程序员来调整要求