You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用mysqli获取数据表每行的最后一个非空数据

获取每行ID对应的最后一个非空值的MySQL查询方案

假设你的表结构为:每行包含ID字段和多个可能为空的业务字段,需要提取每行ID对应的最后一个非空业务字段值,转换为目标表结构。

固定列场景解决方案

使用MySQL内置的COALESCE()函数,该函数会返回参数列表中第一个非空值。只需将业务字段按从后到前的顺序传入函数,即可得到每行的最后一个非空值。

示例SQL语句:

SELECT 
    id,
    COALESCE(col4, col3, col2, col1) AS last_non_null_value
FROM 
    your_table;
  • 将your_table替换为你的实际表名
  • 将col1至col4替换为你的实际业务字段名,注意顺序需是最右侧字段在前,最左侧字段在后

动态列场景解决方案(PHP+mysqli实现)

如果表的业务字段数量不固定,可通过动态SQL拼接字段列表实现:

<?php
// 建立mysqli连接
$conn = mysqli_connect("localhost", "your_username", "your_password", "your_db");

// 获取所有业务字段(排除ID字段)
$colQuery = mysqli_query($conn, "SHOW COLUMNS FROM your_table WHERE Field != 'id'");
$columns = [];
while ($colRow = mysqli_fetch_assoc($colQuery)) {
    $columns[] = $colRow['Field'];
}

// 反转字段顺序,让最后一列排在最前
$reversedCols = array_reverse($columns);
$coalesceStr = implode(', ', $reversedCols);

// 生成并执行查询
$sql = "SELECT id, COALESCE($coalesceStr) AS last_non_null_value FROM your_table";
$result = mysqli_query($conn, $sql);

// 处理查询结果
while ($row = mysqli_fetch_assoc($result)) {
    // 示例:输出结果
    printf("ID: %d, 最后一个非空值: %s\n", $row['id'], $row['last_non_null_value']);
}

// 关闭连接
mysqli_close($conn);
?>

内容的提问来源于stack exchange,提问作者bappi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:27:03