LEFT JOIN关联查询未返回关联表首行数据问题排查
解决思路
验证关联条件匹配性
先确认invoice.order_id和invoice_address.invoice_no的数值、数据类型完全一致。直接执行这条SQL测试匹配结果:SELECT * FROM invoice WHERE order_id = (SELECT invoice_no FROM invoice_address WHERE id = [你传入的GET参数id值]);如果这条语句也拿不到id=5的行,说明两个字段的值不匹配(比如一个是带空格的字符串,一个是整数,或者数值本身不同)。
调整PDO结果集读取方式
当前用foreach($stmt as $row)遍历结果集,部分PDO配置下可能无法完整返回所有行,建议改为先获取全部结果再遍历:$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach($rows as $row){ $output .= '<tr> <td>'.$row["item_name"].'</td> <td><small>'.$row["item_no"].'</small></td> <td>'.$row["qty"].'</td> <td>R '.$row["price"].'</td> <td>R '.$row["amount_total"].'</td> </tr>'; }排查LEFT JOIN逻辑是否符合预期
LEFT JOIN会保留invoice_address的所有行,但如果invoice表中id=5的行order_id和当前invoice_address的invoice_no不匹配,自然不会被返回。可以直接查看invoice表id=5的order_id值,和invoice_address对应id的invoice_no值对比,确认是否一致。避免SQL字段冲突
你用了SELECT *,如果两张表有同名字段(除了id),会导致结果被覆盖。建议明确指定需要查询的字段,避免冲突:SELECT invoice_address.id as invaid, invoice.id as invid, invoice.item_name, invoice.item_no, invoice.qty, invoice.price, invoice.amount_total FROM invoice_address LEFT JOIN invoice ON invoice.order_id=invoice_address.invoice_no WHERE invoice_address.id= :id
内容的提问来源于stack exchange,提问作者the_guru
相关产品推荐
相关产品推荐

