我在一家电子商店担任管理员,我们正在使用OpenCart电子商务,最近他们要求我为Bulk产品添加特价并让它运行几天。当然我可以在管理页面中逐一更改它。我可以通过phpMyAdmin改变它 (Opencart版本2.1.0.1)
我有46种产品,价格为25欧元,我必须加20欧元的特价。
表我们要更新价格是
oc_product_special
我们必须更新和列
oc_product_special.price
当然,我们需要从表中花费25欧元的产品
oc_product
从此表中检索产品并将特价加到20€
问题是如何连接这两个表,所以我可以添加特殊价格的SQL查询运行,所以我可以实现这一点。
oc_product & oc_product_special , update this column oc_product_special.price
我试图运行此SQL查询,但收到错误
UPDATE `oc_product_special`.price
SET `oc_product_special`.price = 16.1290
FROM `oc_product`
INNER JOIN `oc_product_special`
ON `oc_product`.product_id =`oc_product_special`.product_id
WHERE`oc_product`.price = 20.1612;
****价格不含税25€/ 1,24(税率)= 20.1612€
错误
#1064 - 您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在oc_product
上{' FROM oc_product_special
INNER JOIN oc_product
附近使用正确的语法.product_id ='在第2行
** 编辑
更新我的Sql查询
UPDATE oc_product_special AS ps
INNER JOIN oc_product op ON ps.product_id = op.product_id
set ps.price = 16.1290
where op.price = 20.1612
但事实是0行受到影响。 (查询耗时0.0003秒),如果我使用这些价格运行选择查询,我有结果。
select *
from oc_product as op
where op.price=20.1612
显示0到29行(总共46行,查询耗时0.0010秒)
***** 第二次更新
首先我跑了
DELETE FROM `oc_product_special`
WHERE product_id IN
(
SELECT product_id
FROM oc_product p
WHERE p.price = 20.1612
);
所以我可以"从这些产品中删除任何现有特价" ,此查询运行没有任何问题
之后我尝试运行插入查询
INSERT INTO `oc_product_special` (`product_special_id`, `product_id`, `customer_group_id`, `priority`, `price`, `date_start`,`date_end`)
VALUES
(
SELECT NULL, 78, 1, 0, 16.1290, 0000-00-00, 0000-00-00
FROM oc_product p
WHERE p.price = 20.1612
);
我将有关数据调整到了我的表格数据。但我收到此错误
#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在#oc; SELECT NULL,78,1,0,16.1290,0000-00-00,0000-00-00附近使用正确的语法FROM oc_product p'第4行
答案 0 :(得分:0)
您的查询没有格式,并且不符合MySQL标准,您必须注意以下事项:
UPDATE
语句之后,应指定要使用的表而不是列SET
语句仅出现在INNER JOIN
在下面更正MySQL查询(更改价格):
UPDATE oc_product_special AS ps
INNER JOIN oc_product op ON ps.product_id = op.product_id
set ps.price = 22 where op.price = 0.00
答案 1 :(得分:0)
您需要插入语句而不是更新。您也可以考虑事先从这些产品中删除任何现有特价,并运行查询以清除它们:
DELETE FROM `oc_product_special`
WHERE product_id IN
(
SELECT product_id
FROM oc_product p
WHERE p.price = 20.1612
);
然后,您可以选择所需的产品ID以及其他字段,并按以下方式插入:
INSERT INTO `oc_product_special` (`product_special_id`, `product_id`, `customer_group_id`, `priority`, `price`, `date_start`, `date_end`)
VALUES
(
SELECT NULL, product_id, 1, 0, 16.1290, CURDATE(), CURDATE() + INTERVAL 1 DAY
FROM oc_product p
WHERE p.price = 20.1612
);
在这个例子中,特色从今天开始并运行5天。当然,您应该在我的查询中调整customer_group_id
,priority,
start_date , and
end_date`。