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

PHP查询SQL输出表格时如何让相同ITEMNO行紧贴不同ITEMNO行留空行

问题原因

  1. 原代码中的判断if ($ITEMNO = $ITEMNO)是赋值操作而非等值判断,永远返回真,会导致每次循环都输出空行
  2. 没有记录上一条数据的ITEMNO,无法区分是否是同物料分组
  3. 每次循环都重复创建table、输出表头,HTML结构不规范,也会导致物料基础信息重复展示

实现思路

新增变量存储上一条记录的ITEMNO,循环时对比当前ITEMNO与上一次存储的值:

  • 若两者不同且不是第一条数据,输出空行分隔不同物料
  • 同物料下仅首次输出物料基础信息(ITEMNO、DESC、STOCKUNIT),后续仅输出库存位置行,无需空行

修正后代码

$table = "SELECT * FROM [TestDB].[dbo].[ICILOC] INNER JOIN [TestDB].[dbo].[ICITEM] ON [TestDB].[dbo].[ICILOC].[ITEMNO]=[TestDB].[dbo].[ICITEM].[ITEMNO] WHERE [QTYONHAND] <> '0' ORDER BY [ICILOC].[ITEMNO] DESC ";
$RS = odbc_exec($connection, $table);

// 存储上一次的ITEMNO,初始为null
$prevItemNo = null;

while (odbc_fetch_row($RS)) {
    $ITEMNO = odbc_result($RS, "ITEMNO");
    $DESC = odbc_result($RS, "DESC");
    $STOCKUNIT = odbc_result($RS, "STOCKUNIT");
    $UNITWGT = odbc_result($RS, "UNITWGT");
    $LOCATION = odbc_result($RS, "LOCATION");
    $QTYONHAND = odbc_result($RS, "QTYONHAND");
    $QTYONORDER = odbc_result($RS, "QTYONORDER");
    $QTYSALORDR = odbc_result($RS, "QTYSALORDR");

    // 判断是否是新的ITEMNO
    if ($ITEMNO != $prevItemNo) {
        // 不是第一条数据的话,先输出空行分隔上一个物料
        if ($prevItemNo !== null) {
            echo "<br><br>";
        }
        // 输出当前物料的基础信息表头和内容
        echo "<center><table>";
        echo "<tr><th>ITEMNO</th><th>DESC</th><th>STOCKUNIT</th></tr>";
        echo "<tr><td>$ITEMNO</td><td>$DESC</td><td>$STOCKUNIT</td></tr>";
        // 输出库存信息表头
        echo "<tr><th>LOCATION</th><th>QTYONHAND</th><th>QTYONORDER</th><th>QTYSALORDR</th></tr>";
    }

    // 不管是不是同物料,都输出当前库存行
    echo "<tr><td>$LOCATION</td><td>$QTYONHAND</td><td>$QTYONORDER</td><td>$QTYSALORDR</td></tr>";

    // 更新上一次的ITEMNO为当前值
    $prevItemNo = $ITEMNO;
}

// 最后闭合table和center标签
echo "</table></center>";
odbc_close($connection);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:02