繁体   English   中英

仅获取 MySQL 结果数组中具有非 NULL 结果的列名?

[英]Get only the column names with non-NULL results in a MySQL result array?

即使列中没有结果,mysqli_fetch_fields 也会显示所有列名。

SHOW COLUMNS 做同样的事情。

如果该列中有结果,我希望找到一种仅显示列名称的方法。

我能想到的唯一方法是为名为“column_name”的列名创建一个数组,然后遍历结果数组中的所有结果。 如果有结果,检查列名是否在 column_name 数组中,如果不在 column_name 数组中,则添加它。 但这似乎资源繁重。 有没有更快/更好的方法来做到这一点?

更新:这就是我想出的......

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
$column_name=array();
$query="SELECT * FROM tablename";
$result=mysqli_query($link, $query);

for ($set = array (); $row = $result->fetch_assoc(); $set[] = $row);

foreach ($set as &$record) 
    {
    foreach ($record as $key => $value) 
        {
        if (isset($value))
            {
            if (in_array($key, $column_name)) 
                {
                //do nothing because the false flag doesn't work as expected.
                }
            else
                {
                $column_name[]=$key;    
                }
            }
        }
    }

print_r($column_name);

例如,让我们考虑下表empty_columns

id  col1    col2    col3    col4
---------------------------------
1   1       NULL    NULL    NULL
2   NULL    NULL    NULL    NULL
3   1       1       NULL    NULL
4   NULL    NULL    NULL    NULL
5   NULL    1       NULL    NULL
6   1       NULL    NULL    1
7   NULL    NULL    NULL    NULL

如果我理解您的问题是正确的,那么您希望以['col1', 'col2', 'col4'] ,因为这些是唯一包含至少一个值的列。 所以col3不在那里,因为它只包含 NULL 值。

如果您要运行以下查询:

select 
    max(col1) as col1, 
    max(col2) as col2, 
    max(col3) as col3, 
    max(col4) as col4 
from empty_columns

您将获得单行结果,其中只有col3包含 NULL。 然后只需要遍历列并检查 NULL 值,就可以得到结果...

对不起,如果我误解了什么......让我们假设一般。 表( names )结构:

身份证 | 姓名 | 数据

1 | 随机名称2 | 45820

2 | | 45821

3 | 随机名称3 | 45822

4 | | 45823

5 | 随机名称5 | 45824

编辑(更好的查询解决方案):

$sql = "SELECT * FROM names WHERE name != """;
$result = $db->query($sql);
if ($result->num_rows > 0)
{
    while ($row = $result->fetch_assoc())
            echo 'ID: '.$row['id'].' '.$row['name'].' '.$row['data'].'<br>';
}
else
    echo '0 results';

老一:

$sql = "SELECT * FROM names";
$result = $db->query($sql);
if ($result->num_rows > 0)
{
    while ($row = $result->fetch_assoc())
    {
        if (!empty($row['name'])) // All rows with empty values in 'name' column will be ignored.
            echo 'ID: '.$row['id'].' '.$row['name'].' '.$row['data'].'<br>';
    }
}
else
    echo '0 results';*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM