如何用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
相关产品推荐
相关产品推荐

