如何在PHP+MySQL左连接匹配数据后移除空字段?
问题原因
你目前使用的LEFT JOIN逻辑是保留左表oc4e_product的全部记录,哪怕右表item没有符合关联条件的匹配项,右表对应的字段也会返回NULL值,所以才会出现空字段的情况。
解决方案
如果只需要展示两张表完全匹配成功的记录,优先推荐你把LEFT JOIN替换为INNER JOIN:INNER JOIN本身的特性就是仅返回两张表满足关联条件的记录,自动过滤掉无匹配的行,性能也比LEFT JOIN加过滤条件更好。
你只需要把SQL语句修改为以下内容即可:
select * from oc4e_product inner join item ON item.Description = oc4e_product.model
如果因为特殊业务需求必须保留LEFT JOIN的写法,也可以在SQL末尾加WHERE条件过滤空匹配项,写法如下:
select * from oc4e_product left join item ON item.Description = oc4e_product.model WHERE item.Description IS NOT NULL
额外优化建议
你当前的HTML表头代码中重复定义了2个POS Name的表头,可以删除多余的一个,避免表格列数错乱。
修改后完整代码
<?php include 'connection.php'; // 关联两张表的匹配记录 $sql = "select * from oc4e_product inner join item ON item.Description = oc4e_product.model"; $result = mysqli_query($conn, $sql); echo "<table border = 1px>"; echo "<tr> <th>S/No</th> <th>Web Name</th> <th>POS Name</th> </tr>"; $i=1; if (mysqli_num_rows($result) > 0) { while ($row = mysqli_fetch_array($result)) { echo "<tr> <td>" . $i . "</td> <td>".$row['model'] ."</td> <td>". $row['Description'] . "</td> </tr>"; $i++; } } echo "</table>"; ?>
内容的提问来源于stack exchange,提问作者Amir Ali
相关产品推荐
相关产品推荐

