![](/img/trans.png)
[英]How can I return mysql search results where only the columns with non-null entries are displayed
[英]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.