如何通过shipping表tracking_id关联更新customers表的import字段值
正确SQL写法及错误说明
原有写法错误原因
- 写法1错误:关联条件逻辑不符表结构,你写的
orders.orderid = customers.id是错误的,应该是orders.customerid = customers.id,订单表的customerid字段才是关联客户表主键id的对应字段 - 写法2错误:存在三处问题:①表名拼写错误,客户表名为
customers不是customer;②SET子句缺少赋值逻辑,没有指定import = '88';③WHERE条件没有指定匹配字段,需要通过customers.id IN (子查询结果)完成关联匹配
可用的正确写法
写法1:JOIN关联更新(执行效率更高,推荐使用)
UPDATE customers INNER JOIN orders ON orders.customerid = customers.id INNER JOIN shipping ON shipping.orderid = orders.orderid SET customers.import = '88' WHERE shipping.tracking_id = '". $row["tracking_id"] ."'
写法2:子查询更新
UPDATE customers SET import = '88' WHERE id IN ( SELECT orders.customerid FROM shipping INNER JOIN orders ON orders.orderid = shipping.orderid WHERE shipping.tracking_id = '". $row["tracking_id"] ."' )
安全注意事项
直接在PHP中拼接SQL字符串存在SQL注入风险,建议使用PDO或MySQLi的预处理语句绑定参数,示例如下:
// PDO预处理示例 $pdo = new PDO('mysql:host=你的数据库地址;dbname=你的库名;charset=utf8mb4', '数据库用户名', '数据库密码'); $stmt = $pdo->prepare("UPDATE customers INNER JOIN orders ON orders.customerid = customers.id INNER JOIN shipping ON shipping.orderid = orders.orderid SET customers.import = '88' WHERE shipping.tracking_id = ?"); $stmt->execute([$row['tracking_id']]);
内容的提问来源于stack exchange,提问作者viktor1230
相关产品推荐
相关产品推荐

