问题出在 UPDATE 行。我得到的错误说 错误:不是唯一的表/别名:'tmpStock' 我以前从未使用过 INNER JOIN。
$link = mysql_connect('host', 'log', 'pwd');
If (!$link) { die ('Could not connect: ' . mysql_error()); }
@mysql_select_db('admin_sandbox') or die ('Unable to select database');
$result = mysql_query("CREATE TEMPORARY TABLE tmpStock
(pid int(10), cid int(10), manufacturer_id int(10), is_visible enum('Yes',
'No'), product_type varchar(50), is_dollar_days enum('Yes',
'No'), product_id varchar(64), is_doba enum('Yes', 'No'),is_locked
enum('Yes', 'No'),
inventory_control enum('Yes', 'AttrRuleExc') ) ENGINE=MyISAM DEFAULT
CHARSET=latin1 ");
$result = mysql_query("LOAD DATA LOCAL INFILE 'sampleproducts.txt' INTO
TABLE tmpStock FIELDS TERMINATED BY '\t' ENCLOSED BY '\"' LINES TERMINATED
BY '\n'")or die ('Error: '.mysql_error ());
$result = mysql_query("UPDATE tmpStock INNER JOIN products ON
tmpStock.product_id = products.product_id SET
products.stock = tmpStock.stock WHERE tmpStock.product_id =
products.product_id") or die ('Error: '.mysql_error ());
最佳答案
您在 UPDATE
查询中列出了两个表,然后在 tmpStock
上进行了内部联接,因此在查询中复制了 tmpStock
。您可以使用自联接,但它们需要一个别名。但这里完全是多余的。
在 MySQL 中,使用 INNER JOIN
就像在 SELECT
语句中一样,只有 FROM
子句被替换为 UPDATE
放在开头,SET
放在表连接之后,最后是 WHERE
子句:
"UPDATE tmpStock
INNER JOIN products ON tmpStock.product_id = products.product_id
SET products.stock = tmpStock.stock;"
此外,我反转了 SET
表达式。由于临时表在用户 session 后被销毁,因此您不会在任何一个表中看到更改。您很可能想更新 products
表中的 stock
字段。
关于php - 导入制表符分隔的文本以更新远程机器上的 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682225/