Opencart - phpMyAdmin批量更新特价

时间:2016-08-23 19:31:29

标签: sql phpmyadmin opencart price

我在一家电子商店担任管理员,我们正在使用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行

感谢任何帮助 enter image description here

** 编辑

更新我的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行

2 个答案:

答案 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_idpriority, start_date , and end_date`。