2016-08-23 46 views
0

我在一家使用OpenCart电子商务的电子商店中担任管理员职务,最近他们要求我向散装产品添加特价,并让其运行数天。当然,我可以在管理页面中逐一更改它。事情是我可以通过phpMyAdmin改变它。
(Opencart版本2.1.0.1)Opencart - phpMyAdmin批量更新特价

我有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服务器版本使用附近的正确语法手册 'FROM oc_product INNER JOIN oc_product_special ON 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服务器版本对应的手册,以便在第4行'SELECT NULL,78,1,0,16.1290,0000-00-00,0000-00-00 FROM oc_product p'附近使用正确的语法。

+0

阅读本文可能有所帮助:http://dev.mysql.com/doc/refman/5.7/en/update.html – billynoah

+0

@billynoah已编辑,现在有正确的语法,但我没有收到任何结果 –

+0

我看到你已经接受了一个答案 - 这是否意味着你的问题解决了? – billynoah

回答

0

你的查询有没有格式,不符合MySQL的标准,你必须要注意以下几点:

  • UPDATE声明后应该指定要使用的表,而不是列
  • SET声明仅适用于INNER JOIN
  • 使用后缀连接表

下面正确的MySQL查询时,ES为方便(改价格):

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 
+0

谢谢你的回答,我需要更多的帮助来解决这个问题。 –

+0

什么更帮你需要? @AgathonMarinopoulos – Sphinx

+0

嗨狮身人面像,你可以看到我编辑我的问题后,您的查询,但不幸的是我没有预期的结果。 –

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`。

+0

感谢您的答案,我更新了我的问题,因为我仍然收到错误,试图在特定产品中添加特殊价格。 –

+0

您运行的查询与我提供的查询不同。 – billynoah