我需要你的帮助:)我是初学者,我会尽量保持清醒。
我需要使用csv文件中的数据更新2个表。 csv有3列:参考,价格和数量。
1)要更新的第一个SQL表很容易。该表有4列: Id产品,价格,数量和参考(与csv文件中的refence相同)
$mysqlquery.="UPDATE ps_product SET quantity = ".$data[2].", price = ".$data[3]." WHERE reference = '".$data[1]."';";
2)然后我需要更新第二个表但缺少参考列。 另一个表有3列:ID,价格,数量。
如何存储附加到引用的ID以更新第二个表?
欢迎任何帮助!
由于
----更新--- 对不起,如果我不清楚。 我找到了一个解决方案:INNER JOIN
$mysqlquery.="UPDATE ps_stock_available AS s
INNER JOIN ps_product_shop AS ps ON ps.id_product = s.id_product
INNER JOIN ps_product AS p ON p.id_product = ps.id_product
SET s.quantity = ".$data[2].", ps.price=".$data[3]." WHERE p.reference = '".$data[1]."';";
答案 0 :(得分:0)
如果您向我们展示了表格的完整结构,那将会很有帮助。如果我已正确理解你,那么你说ps_product.reference是表的自然主键,但有一个代理键,由second_table.id引用。
您没有告诉我们second_table.id引用了ps_product中的哪个属性。你没告诉我们第二个表被叫什么。
当你有一个自然键时使用代理键是非常糟糕的编程习惯。将非唯一键命名为" id"是糟糕的编程习惯。在关系数据库中的多个位置存储相同的数据是非常非常糟糕的编程习惯。
你开始了解原因。
任何人都可以给你的最好的建议是现在杀死这个怪物并从头开始。但毫无疑问,你认为它现在只是一点点痛苦,未来一切都将是美好的。它不会成功。你会陷入地狱的陷阱,无法逃脱。
您可以对JOIN进行更新,但这是一个难以解决的严重设计缺陷:
UPDATE second_table st JOIN product_ps ps
ON st.id=ps.id
SET st.quantity = ".$data[2].", st.price = ".$data[3]."
WHERE ps.reference = '".$data[1]
但是因为值在的product_ps表....
UPDATE second_table st JOIN product_ps ps
ON st.id=ps.id
SET st.quantity = ps.price, st.price = st.quantity
WHERE ps.reference = '".$data[1]
我认为您完全信任正在处理的CSV文件的来源和完整性。如果没有,那么它会为你杀死你的数据库,除非你在内容周围添加一些验证。