【问题标题】:Counting how many MySQL fields in a row are filled (or empty)计算一行中有多少 MySQL 字段被填充(或为空)
【发布时间】:2011-10-06 22:28:25
【问题描述】:

我需要组合一个方法,让我能够量化用户连续填写了多少字段。

例如:

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,但任何路线图都将不胜感激。

【问题讨论】:

    标签: php mysql sql codeigniter


    【解决方案1】:
    $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';
    }
    

    【讨论】:

    • 谢谢 :) 另外,我从 MySQL 查询中删除了第一行 $user = 1;WHERE `user`。起初,当我以为您想找到一个用户的完成百分比时,我正在使用它,但是当我意识到您想为所有用户计算它时,我并没有使用它们。
    • @Paulpro 如果我需要从多个表中进行选择,例如select * from table1, table2,那么查询应该是什么样子呢?谢谢
    【解决方案2】:
    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
    

    根据没有信息的含义使用大小写:空或空。

    【讨论】:

      【解决方案3】:

      我认为这会在 php 中得到更好的解决,您可以在其中创建一个定义列名并为每个列分配权重的函数,然后根据从数据库中检索到的数据计算 %complete 这就是为什么一个名字可以占 20% 和一个年龄可以占 5% 等等。列和重量定义甚至可以存储在外部,比如一个 xml 文件,这样其他人就可以玩百分比而不需要程序员来调整要求

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-23
        • 2019-04-12
        相关资源
        最近更新 更多