php - 导入制表符分隔的文本以更新远程机器上的 MySQL 表

标签 php mysql file-io load

问题出在 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/

相关文章:

mysql - 我如何从 'myTable' 中选择用户名 WHERE 用户名 =(从不同的表中获取 * 用户名)

c# - 为什么复制到U盘时文件修改时间自动增加2秒?

c - 未正确声明数组检测到堆栈粉碎错误

php - 从 PHP 生成 jQuery GanttView 的数据

来自复选框值的 PHP 数组仅返回数组而不是值

javascript - amp; 在哪里?来自?

c - 从文本文件中读入特定数据(C)

php - Mod_rewrite 和 $_GET 变量

mysql - 问号在 MySQL 中 "WHERE column = ?"的意义是什么?

php mysql登录标题问题